QAction

QAction概念

QAction類別代表窗口的一個動作,這個動作可顯示在選單,當使用者點擊選單時做出反應,也可在工具欄,當使用者點擊工具欄時做出反應,兩者所執行的動作應該都是一樣的,因此,Qt並沒有專門的選單類或工具欄類,只使用同樣的QAction類別,當我們把QAction對象添加到選單,就顯示成一個選單項,添加到工具欄,就顯示成一個工具按鈕。

QAction包含了圖標、選單文字、快捷鍵、浮動幫助等,當把一個QAction對象添加到程式中時,Qt自動選擇該使用哪個屬性來顯示,不需要另外設定,同時,QAction對象在不同的選單、工具欄時,顯示內容是同步的,也就是說,如果我們在菜單中修改了QAction的圖標,那麼在工具欄上面這個QAction所對應的按鈕的圖標也會改變。


創建選單項和工具欄

範例我們創立一個開啟檔案的QAction對象,把此對象添加至選單項和工具欄內,Qt會自動在選單項和工具欄以不同的方式呈現,按下後開啟一個新的對話框。


mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QAction>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
private:
    QAction *openAction;
private slots:
    void open();
};

#endif 

mainwindow.cpp

#include "mainwindow.h"
#include <QMenuBar>
#include <QMessageBox>
#include <QToolBar>
#include <QStatusBar>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent)
{
    setWindowTitle(tr("Main Window"));
    openAction = new QAction(QIcon("open.png"), tr("開啟檔案"), this);
    openAction->setShortcuts(QKeySequence::Open);
    openAction->setStatusTip(tr("開啟檔案"));
    connect(openAction, SIGNAL(triggered()), this, SLOT(open()));

    QMenu *file = menuBar()->addMenu(tr("&File"));
    file->addAction(openAction);

    QToolBar *toolBar = addToolBar(tr("&File"));
    toolBar->addAction(openAction);

    statusBar() ;
}

void MainWindow::open()
{
    QMessageBox::information(this, tr("消息對話框"), tr("觸發開啟檔案動作"));
}

main.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

QAction


  • setShortcut()為觸發這個QAction的快捷鍵,QKeySequence為我們定義了很多內置的快捷鍵,也可以用tr(“Ctrl+O")來當作開啟檔案的快捷鍵,但是一些按鍵在Windows和Mac鍵盤上可能不同,使用QKeySequence類來添加快捷鍵,會根據平台的不同來定義慣用的快捷鍵。
  • setStatusTip()為當滑鼠滑過這個action時,會在主窗口下方的狀態欄顯示相應的提示。