Qt Widgets——动作类与小部件菜单项

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

QAction

——QWidgetAction

QActionGroup

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

QAction

公有函数如下:

 QAction(QObject * parent)
    QAction(const QString & text, QObject * parent)
    QAction(const QIcon & icon, const QString & text, QObject * parent)
    ~QAction()  

void    setText(const QString & text)//设置文本
void    setSeparator(bool b)//设成分割线,为深灰色的线,用于分割功能区
void    setStatusTip(const QString & statusTip)//鼠标放至图标上时,状态栏提示文本
void    setToolTip(const QString & tip)//鼠标放到上方时显示的提示文本
void    setWhatsThis(const QString & what)
void    setIcon(const QIcon & icon)//设置图标
void    setIconText(const QString & text)//如果没有setText(),则这个会显示
void    setIconVisibleInMenu(bool visible)//默认图标在菜单中是可见的
void    setMenu(QMenu * menu)//本action形成右方有小箭头的子菜单
void    setMenuRole(MenuRole menuRole)//菜单角色设定,由于Mac OS X系统的一些特性,Qt 会对一些菜单项进行自动排列。比如,如果你的菜单是“关于”、“设置”、“首选项”、“退出”等等,我们可以给它们分配一个角色,Qt 则会根据这些角色对菜单项的顺序作出正确的排列。枚举值见1
void    setCheckable(bool)//设置是否可以勾选
void    setData(const QVariant & userData)//
void    setFont(const QFont & font)
void    setPriority(Priority priority)//设置优先级,该优先级用于表明action在用户界面上的优先级。如,当工具栏设置了Qt::ToolButtonTextBesideIcon模式,那么低优先级的actions将不会显示出标签。枚举值见2
void    setActionGroup(QActionGroup * group)//将本动作添加到某组
void    setAutoRepeat(bool)//当长按快捷键时,是否不断触发,默认是
void    setShortcut(const QKeySequence & shortcut)//设置快捷键
void    setShortcutContext(Qt::ShortcutContext context)
void    setShortcuts(const QList<QKeySequence> & shortcuts)
void    setShortcuts(QKeySequence::StandardKey key)  

QActionGroup *  actionGroup() const
void    activate(ActionEvent event)
QList<QGraphicsWidget *>  associatedGraphicsWidgets() const
QList<QWidget *>  associatedWidgets() const
bool    autoRepeat() const
QVariant    data() const
QFont   font() const
QIcon   icon() const
QString iconText() const
bool    isCheckable() const
bool    isChecked() const
bool    isEnabled() const
bool    isIconVisibleInMenu() const
bool    isSeparator() const
bool    isVisible() const
QMenu * menu() const
MenuRole    menuRole() const
QWidget *   parentWidget() const
Priority    priority() const
QKeySequence    shortcut() const
Qt::ShortcutContext shortcutContext() const
QList<QKeySequence>   shortcuts() const
bool    showStatusText(QWidget * widget = 0)
QString statusTip() const
QString text() const
QString toolTip() const
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

公有函数如下:

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

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

QActionGroup

   QActionGroup(QObject * parent)
    ~QActionGroup()
QList<QAction *>  actions() const
QAction *   addAction(QAction * action)//返回的是原action
QAction *   addAction(const QString & text)
QAction *   addAction(const QIcon & icon, const QString & text)
QAction *   checkedAction() const//返回当前被选中的action
bool    isEnabled() const
bool    isExclusive() const
bool    isVisible() const
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,加了个列表进去。

效果如图:

代码如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QListWidget>
#include <QWidgetAction>
#include <QAction>
#include <QMenu>
#include <QIcon>
#include <QKeySequence>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    menu=new QMenu("菜单");
    menu->addAction("子菜单");
//QAction
    ac1=new QAction(this);
    ac1->setText("setText");
    //ac1->setSeparator(true);
    ac1->setStatusTip("setStatusTip");
    ac1->setToolTip("setToolTip");
    ac1->setWhatsThis("setWhatsThis");
    ac1->setIcon(QIcon("://tray.ico"));
    ac1->setIconText("setIconText");
    ac1->setMenu(menu);
    ac1->setCheckable(true);
    ac1->setData(QString("setData"));
    ac1->setPriority(QAction::HighPriority);
    ac1->setShortcut(QKeySequence(tr("Ctrl+P")));  

    ui->mainToolBar->addAction(ac1);
//QActionGroup
    main_ac1=new QAction("左对齐",this);//创建动作
    main_ac2=new QAction("右对齐",this);
    main_ac3=new QAction("居中对齐",this);
    main_ac1->setCheckable(true);//设置是否可选中
    main_ac2->setCheckable(true);
    main_ac3->setCheckable(true);
    QActionGroup *alignmentGroup = new QActionGroup(this);
    alignmentGroup->addAction(main_ac1);//将动作加入组
    alignmentGroup->addAction(main_ac2);
    alignmentGroup->addAction(main_ac3);
    main_ac2->setChecked(true);//设置一个默认选中的  

    QActionGroup *Group = new QActionGroup(this);
    QAction *ac_1 = Group->addAction("粗体");
    QAction *ac_2 = Group->addAction("倾斜");
    ac_1->setCheckable(true);
    ac_2->setCheckable(true);
    Group->setExclusive(false);
    //connect(ac,SIGNAL(triger)……  

    QMenu *menu2=new QMenu("设置",this);
    menu2->addAction(main_ac1);//将动作加入菜单
    menu2->addAction(main_ac2);
    menu2->addAction(main_ac3);
    menu2->addAction(ac_1);
    menu2->addAction(ac_2);
    ui->menuBar->addMenu(menu2);  

//QWidgetAction
    //构建个自定义小部件
    QListWidget *lw=new QListWidget;
    lw->addItem("列表项1");
    lw->addItem("列表项2");
    lw->addItem("列表项3");
    //将部件加入QWidgetAction
    QWidgetAction *a1=new QWidgetAction(this);
    a1->setDefaultWidget(lw);
    //将QWidgetAction加入到QMenu
    QMenu *menu3=new QMenu(this);
    menu3->addAction(a1);
    //建立托盘图标,将QMenu加入到托盘图标右键菜单中
    QIcon icon("://tray.ico");
    trayIcon = new QSystemTrayIcon(this);
    trayIcon->setIcon(icon);
    trayIcon->setContextMenu(menu3);
    trayIcon->setVisible(true);
}  

MainWindow::~MainWindow()
{
    delete ui;
}  
时间: 2024-07-31 02:04:18

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

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

Main Window and Related Classes QAction 动作类,用于当做一个菜单项或工具项插入菜单或工具栏 QActionGroup 动作组,用于管理多个动作,设置它们之间的互斥性等 QWidgetAction 部件动作,继承自QAction,用于将小部件插入菜单或工具栏 QDockWidget 悬浮部件,程序运行后可鼠标拖动的部件 QMainWindow 主窗口,是其它部件的容器 QMdiArea 子区域,加到QMainWindow中,用于放置多个QMdiSubWind

Android开发指南-窗口小部件(App Widgets)

http://blog.csdn.net/iefreer/article/details/4626274# 应用程序窗口小部件App Widgets 应用程序窗口小部件(Widget)是微小的应用程序视图,可以被嵌入到其它应用程序中(比如桌面)并接收周期性的更新.你可以通过一个App Widget provider来发布一个Widget.可以容纳其它App Widget的应用程序组件被称为App Widget宿主.下面的截屏显示了一个音乐App Widget. 这篇文章描述了如何使用App Wi

YII2 小部件(widgets)

小部件基本上在views中使用,在视图中可调用 yii\base\Widget::widget() 方法使用小部件. 该方法使用 配置 数组初始化小部件并返回小部件渲染后的结果. 例如如下代码插入一个日期选择器小部件,它配置为使用俄罗斯语, 输入框内容为$model的from_date属性值. <?php use yii\jui\DatePicker; ?> <?= DatePicker::widget([ 'model' => $model, 'attribute' =>

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

前言 本次主要是实现一个Android应用,实现静态广播.动态广播两种改变 widget内容的方法,即在上篇博文中实验的基础上进行修改,所以此次实验的重点是AppWidget小部件的实现啦~ 首先,我们简单说一下Widget是一个啥玩意~ 应用程序窗口小部件(Widget)是微小的应用程序视图,可以被嵌入到其它应用程序中(比如桌面)并接收周期性的更新.你可以通过一个App Widget provider来发布一个Widget.可以容纳其它App Widget的应用程序组件被称为App Widge

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

三个可视类的默认外观分别如下(win7):它们的滑块都处于最小值0处. 理解QAbstractSlider时 可将它想成就是QScrollBar(该小部件的外观比较多地拥有QAbstractSlider属性): 属性列表如下: invertedAppearance : bool外观颠倒 invertedControls : bool控制颠倒 maximum : int最大值 minimum : int最小值 orientation :朝向(横向或竖向)Qt::Orientation pageSt

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

默认外观分别如下(win7,与上述顺序对应): 可看出,都是由一个可编辑的文本框及右端小箭头组成 QAbstractSpinBox 属性简单解释如下: Properties accelerated : bool加速 acceptableInput : const bool接受输入 alignment : Qt::Alignment对齐方式 buttonSymbols : ButtonSymbols右端按钮样式 correctionMode :纠正模式 CorrectionMode frame :

【翻译】了解Ext JS 5的小部件

原文:Understanding Widgets in Ext JS 5 在Ext JS 5,引入了新的"widgetcolumn",支持在网格的单元格中放置组件.同时,还在Ext JS 5引入了一种新的被称为"小部件"的轻量级组件.在Ext JS 5中,已包含了几个小部件,在本文将告诉你如何轻松的去打造自己的小部件. 为了说明其中的关键概念,在文中将创建一个简单的名为"ratings"的如下图所示的小部件: 入门 与常用的从Ext.Compon

Qt Widgets——菜单和菜单栏

主窗口MainWindow需要菜单栏QMenuBar及菜单QMenu来组成自身,一般应用程序的所有功能都能在菜单中找到.接下来就来说说它们. QMenu 它添加了很多动作QAction,并用自身组成了菜单栏QMenuBar上的菜单,当然也可用于基它地方,如上下文菜单等. 公有函数如下: QMenu(QWidget * parent = 0) QMenu(const QString & title, QWidget * parent = 0) ~QMenu() QAction * addActio

Tkinter类之窗口部件类

Tkinter类之窗口部件类 Tkinter支持15个核心的窗口部件,这个15个核心窗口部件类列表如下: 窗口部件及说明: Button:一个简单的按钮,用来执行一个命令或别的操作. Canvas:组织图形.这个部件可以用来绘制图表和图,创建图形编辑器,实现定制窗口部件. Checkbutton:代表一个变量,它有两个不同的值.点击这个按钮将会在这两个值间切换. Entry:文本输入域. Frame:一个容器窗口部件.帧可以有边框和背景,当创建一个应用程序或dialog(对话)版面时,帧被用来组