W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
在前面的 QMainWindow 的基礎之上,我們開始著手建造我們的應用程序。雖然現(xiàn)在已經(jīng)有一個框架,但是,確切地說我們還一行代碼沒有寫呢!下面的工作就不那么簡單了!在這一節(jié)里面,我們要為我們的框架添加菜單和工具條。
就像 Swing 里面的 Action 一樣,Qt 里面也有一個類似的類,叫做 QAction。顧名思義,QAction類保存有關于這個動作,也就是 action 的信息,比如它的文本描述、圖標、快捷鍵、回調(diào)函數(shù)(也就是信號槽),等等。神奇的是,QAction 能夠根據(jù)添加的位置來改變自己的樣子——如果添加到菜單中,就會顯示成一個菜單項;如果添加到工具條,就會顯示成一個按鈕。這也是為什么要把菜單和按鈕放在一節(jié)里面。下面開始學習!
首先,我想添加一個打開命令。那么,就在頭文件里面添加一個私有的 QAction 變量:
class QAction;
//...
private:
QAction *openAction;
//...
注意,不要忘記 QAction 類的前向聲明哦!要不就會報錯的!
然后我們要在 cpp 文件中添加 QAction 的定義。為了簡單起見,我們直接把它定義在構造函數(shù)里面:
openAction = new QAction(tr("&Open"), this);
openAction->setShortcut(QKeySequence::Open);
openAction->setStatusTip(tr("Open a file."));
第一行代碼創(chuàng)建一個 QAction 對象。QAction 有幾個重載的構造函數(shù),我們使用的是
QAction(const QString &text, QObject* parent);
這一個。它有兩個參數(shù),第一個 text 是這個動作的文本描述,用來顯示文本信息,比如在菜單中的文本;第二個是 parent,一般而言,我們通常傳入 this 指針就可以了。我們不需要去關心這個 parent 參數(shù)具體是什么,它的作用是指明這個 QAction 的父組件,當這個父組件被銷毀時,比如delete 或者由系統(tǒng)自動銷毀,與其相關聯(lián)的這個 QAction 也會自動被銷毀。
如果你還是不明白構造函數(shù)的參數(shù)是什么意思,或者說想要更加詳細的了解 QAction 這個類,那么就需要自己翻閱一下它的 API 文檔。前面說過有關 API 的使用方法,這里不再贅述。這也是學習 Qt 的一種方法,因為 Qt 是一個很大的庫,我們不可能面面俱到,因此只為說道用到的東西,至于你自己想要實現(xiàn)的功能,就需要自己去查文檔了。
第二句,我們使用了 setShortcut 函數(shù)。shortcut 是這個動作的快捷鍵。Qt 的 QKeySequence 已經(jīng)為我們定義了很多內(nèi)置的快捷鍵,比如我們使用的 Open。你可以通過查閱 API 文檔獲得所有的快捷鍵列表,或者是在 QtCreator 中輸入::后會有系統(tǒng)的自動補全功能顯示出來。這個與我們自己定義的有什么區(qū)別呢?簡單來說,我們完全可以自己定義一個 tr("Ctrl+O")來實現(xiàn)快捷鍵。原因在于,這是Qt 跨平臺性的體現(xiàn)。比如 PC 鍵盤和 Mac 鍵盤是不一樣的,一些鍵在 PC 鍵盤上有,而 Ma x鍵盤上可能并不存在,或者反之,所以,推薦使用 QKeySequence 類來添加快捷鍵,這樣,它會根據(jù)平臺的不同來定義不同的快捷鍵。
第三句是 setStatusTip 函數(shù)。這是添加狀態(tài)欄的提示語句。狀態(tài)欄就是主窗口最下面的一條?,F(xiàn)在我們的程序還沒有添加狀態(tài)欄,因此你是看不到有什么作用的。
下面要做的是把這個 QAction 添加到菜單和工具條:
QMenu *file = menuBar()->addMenu(tr("&File"));
file->addAction(openAction);
QToolBar *toolBar = addToolBar(tr("&File"));
toolBar->addAction(openAction);
QMainWindow 有一個 menuBar()函數(shù),會返回菜單欄,也就是最上面的那一條。如果不存在會自動創(chuàng)建,如果已經(jīng)存在就返回那個菜單欄的指針。直接使用返回值添加一個菜單,也就是 addMenu,參數(shù)是一個 QString,也就是顯示的菜單名字。然后使用這個 QMenu 指針添加這個 QAction。類似的,使用addToolBar 函數(shù)的返回值添加了一個工具條,并且把這個 QAction 添加到了上面。
好了,主要的代碼已經(jīng)寫完了。不過,如果你只修改這些的話,是編譯不過的哦!因為像 menuBar()函數(shù)返回一個 QMenuBar 指針,但是你并沒有 include 它的頭文件哦!雖然沒有明著寫出 QMenuBar 這個類,但是實際上你已經(jīng)用到了它的 addMenu 函數(shù)了,所以還是要注意的!
下面給出來全部的代碼:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QtGui/QMainWindow>
class QAction;
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
private:
QAction *openAction;
};
#endif // MAINWINDOW_H
#include <QtGui/QAction>
#include <QtGui/QMenu>
#include <QtGui/QMenuBar>
#include <QtGui/QKeySequence>
#include <QtGui/QToolBar>
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
openAction = new QAction(tr("&Open"), this);
openAction->setShortcut(QKeySequence::Open);
openAction->setStatusTip(tr("Open a file."));
QMenu *file = menuBar()->addMenu(tr("&File"));
file->addAction(openAction);
QToolBar *toolBar = addToolBar(tr("&File"));
toolBar->addAction(openAction);
}
MainWindow::~MainWindow()
{
}
main.cpp 沒有修改,這里就不給出了。下面是運行結果:
很丑,是吧?不過我們已經(jīng)添加上了菜單和工具條了哦!按一下鍵盤上的 Alt+F,因為這是我們給它定義的快捷鍵。雖然目前挺難看,不過以后就會變得漂亮的!想想看,Linux 的 KDE 桌面可是 Qt 實現(xiàn)的呢!
本文出自 “豆子空間” 博客,請務必保留此出處 http://devbean.blog.51cto.com/448512/194031
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: