本文主要涉及以下三个类:

QAction

——QWidgetAction

QActionGroup

QAction可称为动作类,它一般可当作菜单中的项组成菜单,也可作为工具栏上的按钮,它主要由图标、文本及快捷键三部分组成。QActionGroup用于将QAction分组,设置组内各QAction的互斥性质(exclusive ),设置后,组内的动作,在外观上形成多选框(不互斥)或单选框(互斥)。QWidgetAction继承自QAction,它可将自定义的小部件插入到菜单项中,用于QSystemTrayIcon(托盘图标)的右键菜单似乎很合适。

QAction

公有函数如下:

  1. QAction(QObject * parent)
  2. QAction(const QString & text, QObject * parent)
  3. QAction(const QIcon & icon, const QString & text, QObject * parent)
  4. ~QAction()
  5.  
  6. void setText(const QString & text)//设置文本
  7. void setSeparator(bool b)//设成分割线,为深灰色的线,用于分割功能区
  8. void setStatusTip(const QString & statusTip)//鼠标放至图标上时,状态栏提示文本
  9. void setToolTip(const QString & tip)//鼠标放到上方时显示的提示文本
  10. void setWhatsThis(const QString & what)
  11. void setIcon(const QIcon & icon)//设置图标
  12. void setIconText(const QString & text)//如果没有setText(),则这个会显示
  13. void setIconVisibleInMenu(bool visible)//默认图标在菜单中是可见的
  14. void setMenu(QMenu * menu)//本action形成右方有小箭头的子菜单
  15. void setMenuRole(MenuRole menuRole)//菜单角色设定,由于Mac OS X系统的一些特性,Qt 会对一些菜单项进行自动排列。比如,如果你的菜单是“关于”、“设置”、“首选项”、“退出”等等,我们可以给它们分配一个角色,Qt 则会根据这些角色对菜单项的顺序作出正确的排列。枚举值见1
  16. void setCheckable(bool)//设置是否可以勾选
  17. void setData(const QVariant & userData)//
  18. void setFont(const QFont & font)
  19. void setPriority(Priority priority)//设置优先级,该优先级用于表明action在用户界面上的优先级。如,当工具栏设置了Qt::ToolButtonTextBesideIcon模式,那么低优先级的actions将不会显示出标签。枚举值见2
  20. void setActionGroup(QActionGroup * group)//将本动作添加到某组
  21. void setAutoRepeat(bool)//当长按快捷键时,是否不断触发,默认是
  22. void setShortcut(const QKeySequence & shortcut)//设置快捷键
  23. void setShortcutContext(Qt::ShortcutContext context)
  24. void setShortcuts(const QList<QKeySequence> & shortcuts)
  25. void setShortcuts(QKeySequence::StandardKey key)
  26.  
  27. QActionGroup * actionGroup() const
  28. void activate(ActionEvent event)
  29. QList<QGraphicsWidget *> associatedGraphicsWidgets() const
  30. QList<QWidget *> associatedWidgets() const
  31. bool autoRepeat() const
  32. QVariant data() const
  33. QFont font() const
  34. QIcon icon() const
  35. QString iconText() const
  36. bool isCheckable() const
  37. bool isChecked() const
  38. bool isEnabled() const
  39. bool isIconVisibleInMenu() const
  40. bool isSeparator() const
  41. bool isVisible() const
  42. QMenu * menu() const
  43. MenuRole menuRole() const
  44. QWidget * parentWidget() const
  45. Priority priority() const
  46. QKeySequence shortcut() const
  47. Qt::ShortcutContext shortcutContext() const
  48. QList<QKeySequence> shortcuts() const
  49. bool showStatusText(QWidget * widget = 0)
  50. QString statusTip() const
  51. QString text() const
  52. QString toolTip() const
  53. QString whatsThis() const

Public Slots

void hover()
void setChecked(bool)//只有设为true,才能选中
void setDisabled(bool b)
void setEnabled(bool)
void setVisible(bool)
void toggle()
void trigger()

Signals

void changed()
void hovered()
void toggled(bool checked)//切换
void triggered(bool checked = false)//触发

1,enum QAction::MenuRole

Constant Value Description
QAction::NoRole 0 This action should not be put into the application menu
QAction::TextHeuristicRole 1 This action should be put in the application menu based on the action's text as described in the QMenuBar documentation.
QAction::ApplicationSpecificRole 2 This action should be put in the application menu with an application specific role
QAction::AboutQtRole 3 This action matches handles the "About Qt" menu item.
QAction::AboutRole 4 This action should be placed where the "About" menu item is in the application menu. The text of the menu item will be set to "About <application name>". The application name is fetched from the Info.plistfile in the application's bundle (See Deploying an Application on Mac OS X).
QAction::PreferencesRole 5 This action should be placed where the "Preferences..." menu item is in the application menu.
QAction::QuitRole 6 This action should be placed where the Quit menu item is in the application menu.

2,enum QAction::Priority

Constant Value Description
QAction::LowPriority 0 低优先级
QAction::NormalPriority 128
QAction::HighPriority 256

————————————————————————————————————————————————————————————————————

QWidgetAction

公有函数如下:

  1. QWidgetAction(QObject * parent)
  2. virtual ~QWidgetAction()
  3. QWidget * defaultWidget() const
  4. void releaseWidget(QWidget * widget)
  5. QWidget * requestWidget(QWidget * parent)
  6. void setDefaultWidget(QWidget * widget)//主要用这个设置自定义部件

————————————————————————————————————————————————————————————————————

QActionGroup

  1. QActionGroup(QObject * parent)
  2. ~QActionGroup()
  3. QList<QAction *> actions() const
  4. QAction * addAction(QAction * action)//返回的是原action
  5. QAction * addAction(const QString & text)
  6. QAction * addAction(const QIcon & icon, const QString & text)
  7. QAction * checkedAction() const//返回当前被选中的action
  8. bool isEnabled() const
  9. bool isExclusive() const
  10. bool isVisible() const
  11. void removeAction(QAction * action)

Public Slots

void setDisabled(bool b)
void setEnabled(bool)
void setExclusive(bool)//设置互斥性,默认互斥
void setVisible(bool)

Signals

void hovered(QAction * action)
void triggered(QAction * action)

————————————————————————————————————————————————————————————————————

测试示例,主菜单文件中测试了QActionGroup各函数效果,工具栏测试QAction各函数,系统托盘中测试QWidgetAction,加了个列表进去。

效果如图:

代码如下:

  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include <QListWidget>
  4. #include <QWidgetAction>
  5. #include <QAction>
  6. #include <QMenu>
  7. #include <QIcon>
  8. #include <QKeySequence>
  9. MainWindow::MainWindow(QWidget *parent) :
  10. QMainWindow(parent),
  11. ui(new Ui::MainWindow)
  12. {
  13. ui->setupUi(this);
  14. menu=new QMenu("菜单");
  15. menu->addAction("子菜单");
  16. //QAction
  17. ac1=new QAction(this);
  18. ac1->setText("setText");
  19. //ac1->setSeparator(true);
  20. ac1->setStatusTip("setStatusTip");
  21. ac1->setToolTip("setToolTip");
  22. ac1->setWhatsThis("setWhatsThis");
  23. ac1->setIcon(QIcon("://tray.ico"));
  24. ac1->setIconText("setIconText");
  25. ac1->setMenu(menu);
  26. ac1->setCheckable(true);
  27. ac1->setData(QString("setData"));
  28. ac1->setPriority(QAction::HighPriority);
  29. ac1->setShortcut(QKeySequence(tr("Ctrl+P")));
  30.  
  31. ui->mainToolBar->addAction(ac1);
  32. //QActionGroup
  33. main_ac1=new QAction("左对齐",this);//创建动作
  34. main_ac2=new QAction("右对齐",this);
  35. main_ac3=new QAction("居中对齐",this);
  36. main_ac1->setCheckable(true);//设置是否可选中
  37. main_ac2->setCheckable(true);
  38. main_ac3->setCheckable(true);
  39. QActionGroup *alignmentGroup = new QActionGroup(this);
  40. alignmentGroup->addAction(main_ac1);//将动作加入组
  41. alignmentGroup->addAction(main_ac2);
  42. alignmentGroup->addAction(main_ac3);
  43. main_ac2->setChecked(true);//设置一个默认选中的
  44.  
  45. QActionGroup *Group = new QActionGroup(this);
  46. QAction *ac_1 = Group->addAction("粗体");
  47. QAction *ac_2 = Group->addAction("倾斜");
  48. ac_1->setCheckable(true);
  49. ac_2->setCheckable(true);
  50. Group->setExclusive(false);
  51. //connect(ac,SIGNAL(triger)……
  52.  
  53. QMenu *menu2=new QMenu("设置",this);
  54. menu2->addAction(main_ac1);//将动作加入菜单
  55. menu2->addAction(main_ac2);
  56. menu2->addAction(main_ac3);
  57. menu2->addAction(ac_1);
  58. menu2->addAction(ac_2);
  59. ui->menuBar->addMenu(menu2);
  60.  
  61. //QWidgetAction
  62. //构建个自定义小部件
  63. QListWidget *lw=new QListWidget;
  64. lw->addItem("列表项1");
  65. lw->addItem("列表项2");
  66. lw->addItem("列表项3");
  67. //将部件加入QWidgetAction
  68. QWidgetAction *a1=new QWidgetAction(this);
  69. a1->setDefaultWidget(lw);
  70. //将QWidgetAction加入到QMenu
  71. QMenu *menu3=new QMenu(this);
  72. menu3->addAction(a1);
  73. //建立托盘图标,将QMenu加入到托盘图标右键菜单中
  74. QIcon icon("://tray.ico");
  75. trayIcon = new QSystemTrayIcon(this);
  76. trayIcon->setIcon(icon);
  77. trayIcon->setContextMenu(menu3);
  78. trayIcon->setVisible(true);
  79. }
  80.  
  81. MainWindow::~MainWindow()
  82. {
  83. delete ui;
  84. }

Qt Widgets——动作类与小部件菜单项的更多相关文章

  1. Qt Widgets——主窗口及其主要组成部分

    Main Window and Related Classes QAction 动作类,用于当做一个菜单项或工具项插入菜单或工具栏 QActionGroup 动作组,用于管理多个动作,设置它们之间的互 ...

  2. Android 之窗口小部件详解(三)  部分转载

    原文地址:http://blog.csdn.net/iefreer/article/details/4626274. (一) 应用程序窗口小部件App Widgets 应用程序窗口小部件(Widget ...

  3. 【QT相关】Qt Widgets Module

    Qt Widgets Module:提供了一些列UI元素. 使用: //头文件包含 #include <QtWidgets> //链接模式,在.pro文件中添加行: QT += widge ...

  4. ArcGIS API For JavaScript 开发(三)使用小部件设计页面框架

    其实上一个的鹰眼.比例尺.图例等都是小部件:这篇文章主要是页面布局设计,dojo提供了非常多的小部件,从功能的角度可以分为3大类:表单小部件.布局小部件和应用小部件. 表单小部件于HTML中的表单部件 ...

  5. Android开发5:应用程序窗口小部件App Widgets的实现

    前言 本次主要是实现一个Android应用,实现静态广播.动态广播两种改变 widget内容的方法,即在上篇博文中实验的基础上进行修改,所以此次实验的重点是AppWidget小部件的实现啦~ 首先,我 ...

  6. YII2 小部件(widgets)

    小部件基本上在views中使用,在视图中可调用 yii\base\Widget::widget() 方法使用小部件. 该方法使用 配置 数组初始化小部件并返回小部件渲染后的结果. 例如如下代码插入一个 ...

  7. Qt Widgets——抽象滑块及其继承类

    三个可视类的默认外观分别如下(win7):它们的滑块都处于最小值0处. 理解QAbstractSlider时 可将它想成就是QScrollBar(该小部件的外观比较多地拥有QAbstractSlide ...

  8. Qt Widgets——抽象按钮及其继承类

    QAbstractButton是有关“按钮”的基类 描述了一个按钮应该具有的组成.它的公有函数如下: QAbstractButton(QWidget * parent = ) ~QAbstractBu ...

  9. Qt Widgets——抽象旋转框及其继承类

    默认外观分别如下(win7,与上述顺序对应): 可看出,都是由一个可编辑的文本框及右端小箭头组成 QAbstractSpinBox 属性简单解释如下: Properties accelerated : ...

随机推荐

  1. win 10 安装visual studio 2010

    链接: https://pan.baidu.com/s/1JzA2Ei8NEGRPck253NUM9g 提取码: 52pt 点击下一步即可.

  2. SpringBoot中加密com.github.ulisesbocchio

    Jasypt Spring Boot 为 Spring Boot 项目中的属性源(property sources)提供加密支持. 有三种方法可以在项目中集成 jasypt-spring-boot: ...

  3. jdbcTemplate 后台接口中的分页

    Springboot+jdbcTemplate  对查询结果列表做分页, 之前开发的小项目,数据逐渐增多,每次返回所有的查询结果,耗费性能和时间 想到做分页. 于是从简单的分页做起. jdbcTemp ...

  4. Android 虹软免费人脸识别App

    人脸识别+本机Web后端 人脸sdk采用虹软sdk,本机web采用AndServer:上传姓名+人脸图片即可实现注册源码地址:https://github.com/joetang1989/ArcFac ...

  5. Linux学习3-yum安装java和Tomcat环境

    前言 linux上安装软件,可以用yum非常方便,不需要下载解压,一个指令就能用yum安装java和tomcat环境. 前面一篇已经实现在阿里云服务器上搭建一个禅道系统的网站,算是小有成就,但并不是每 ...

  6. @Scope注解设置创建bean的方式和生命周期

    1.1.1            Scope注解创建bean的方式和生命周期 作用 Scope设置对象在spring容器(IOC容器)中的生命周期,也可以理解为对象在spring容器中的创建方式. 取 ...

  7. jfinal集成cas单点认证实践

    本示例jfinal集成cas单点认证,采用获取到登录用户session信息后,在本地站点备份一份session信息,主要做以下几个步骤: 1.站点引入响应jar包: 2.在web.xml中配置对应过滤 ...

  8. (转)Linux下设置和查看环境变量

    原文地址:<Linux下设置和查看环境变量> Linux的变量种类 按变量的生存周期来划分,Linux变量可分为两类: 1. 永久的:需要修改配置文件,变量永久生效. 2. 临时的:使用e ...

  9. JAVA中”单引号”,“双引号”,“没有单引号和双引号”区别:

    单引号引的数据 是char类型的——>单引号只能引一个字符(表示单个字符)双引号引的数据 是String类型的——>而双引号可以引0个及其以上(引用字符串) char类型的值用单引号引起来 ...

  10. WIN7右键在目录当前打开命令行Cmd窗口

    Win7系统大家习惯“Win+R”的组合键打开命令提示符. 2. 通常情况下,我们点击鼠标右键是没有命令行选项的.. 3.在桌面上先按住Shift键,然后鼠标右键,出现选项“在此处打开命令窗口(W)” ...