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;  
}  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM