99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

Qt 菜單和工具條

2018-10-05 14:45 更新

菜單和工具條

在前面的 QMainWindow 的基礎(chǔ)之上,我們開(kāi)始著手建造我們的應(yīng)用程序。雖然現(xiàn)在已經(jīng)有一個(gè)框架,但是,確切地說(shuō)我們還一行代碼沒(méi)有寫(xiě)呢!下面的工作就不那么簡(jiǎn)單了!在這一節(jié)里面,我們要為我們的框架添加菜單和工具條。

就像 Swing 里面的 Action 一樣,Qt 里面也有一個(gè)類似的類,叫做 QAction。顧名思義,QAction類保存有關(guān)于這個(gè)動(dòng)作,也就是 action 的信息,比如它的文本描述、圖標(biāo)、快捷鍵、回調(diào)函數(shù)(也就是信號(hào)槽),等等。神奇的是,QAction 能夠根據(jù)添加的位置來(lái)改變自己的樣子——如果添加到菜單中,就會(huì)顯示成一個(gè)菜單項(xiàng);如果添加到工具條,就會(huì)顯示成一個(gè)按鈕。這也是為什么要把菜單和按鈕放在一節(jié)里面。下面開(kāi)始學(xué)習(xí)!

首先,我想添加一個(gè)打開(kāi)命令。那么,就在頭文件里面添加一個(gè)私有的 QAction 變量:

class QAction; 
//... 
private: 
        QAction *openAction; 
//...

注意,不要忘記 QAction 類的前向聲明哦!要不就會(huì)報(bào)錯(cuò)的!

然后我們要在 cpp 文件中添加 QAction 的定義。為了簡(jiǎn)單起見(jiàn),我們直接把它定義在構(gòu)造函數(shù)里面:

        openAction = new QAction(tr("&Open"), this); 
        openAction->setShortcut(QKeySequence::Open); 
        openAction->setStatusTip(tr("Open a file."));

第一行代碼創(chuàng)建一個(gè) QAction 對(duì)象。QAction 有幾個(gè)重載的構(gòu)造函數(shù),我們使用的是

QAction(const QString &text, QObject* parent);

這一個(gè)。它有兩個(gè)參數(shù),第一個(gè) text 是這個(gè)動(dòng)作的文本描述,用來(lái)顯示文本信息,比如在菜單中的文本;第二個(gè)是 parent,一般而言,我們通常傳入 this 指針就可以了。我們不需要去關(guān)心這個(gè) parent 參數(shù)具體是什么,它的作用是指明這個(gè) QAction 的父組件,當(dāng)這個(gè)父組件被銷毀時(shí),比如delete 或者由系統(tǒng)自動(dòng)銷毀,與其相關(guān)聯(lián)的這個(gè) QAction 也會(huì)自動(dòng)被銷毀。

如果你還是不明白構(gòu)造函數(shù)的參數(shù)是什么意思,或者說(shuō)想要更加詳細(xì)的了解 QAction 這個(gè)類,那么就需要自己翻閱一下它的 API 文檔。前面說(shuō)過(guò)有關(guān) API 的使用方法,這里不再贅述。這也是學(xué)習(xí) Qt 的一種方法,因?yàn)?Qt 是一個(gè)很大的庫(kù),我們不可能面面俱到,因此只為說(shuō)道用到的東西,至于你自己想要實(shí)現(xiàn)的功能,就需要自己去查文檔了。

第二句,我們使用了 setShortcut 函數(shù)。shortcut 是這個(gè)動(dòng)作的快捷鍵。Qt 的 QKeySequence 已經(jīng)為我們定義了很多內(nèi)置的快捷鍵,比如我們使用的 Open。你可以通過(guò)查閱 API 文檔獲得所有的快捷鍵列表,或者是在 QtCreator 中輸入::后會(huì)有系統(tǒng)的自動(dòng)補(bǔ)全功能顯示出來(lái)。這個(gè)與我們自己定義的有什么區(qū)別呢?簡(jiǎn)單來(lái)說(shuō),我們完全可以自己定義一個(gè) tr("Ctrl+O")來(lái)實(shí)現(xiàn)快捷鍵。原因在于,這是Qt 跨平臺(tái)性的體現(xiàn)。比如 PC 鍵盤(pán)和 Mac 鍵盤(pán)是不一樣的,一些鍵在 PC 鍵盤(pán)上有,而 Ma x鍵盤(pán)上可能并不存在,或者反之,所以,推薦使用 QKeySequence 類來(lái)添加快捷鍵,這樣,它會(huì)根據(jù)平臺(tái)的不同來(lái)定義不同的快捷鍵。

第三句是 setStatusTip 函數(shù)。這是添加狀態(tài)欄的提示語(yǔ)句。狀態(tài)欄就是主窗口最下面的一條?,F(xiàn)在我們的程序還沒(méi)有添加狀態(tài)欄,因此你是看不到有什么作用的。

下面要做的是把這個(gè) QAction 添加到菜單和工具條:

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

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

QMainWindow 有一個(gè) menuBar()函數(shù),會(huì)返回菜單欄,也就是最上面的那一條。如果不存在會(huì)自動(dòng)創(chuàng)建,如果已經(jīng)存在就返回那個(gè)菜單欄的指針。直接使用返回值添加一個(gè)菜單,也就是 addMenu,參數(shù)是一個(gè) QString,也就是顯示的菜單名字。然后使用這個(gè) QMenu 指針添加這個(gè) QAction。類似的,使用addToolBar 函數(shù)的返回值添加了一個(gè)工具條,并且把這個(gè) QAction 添加到了上面。

好了,主要的代碼已經(jīng)寫(xiě)完了。不過(guò),如果你只修改這些的話,是編譯不過(guò)的哦!因?yàn)橄?menuBar()函數(shù)返回一個(gè) QMenuBar 指針,但是你并沒(méi)有 include 它的頭文件哦!雖然沒(méi)有明著寫(xiě)出 QMenuBar 這個(gè)類,但是實(shí)際上你已經(jīng)用到了它的 addMenu 函數(shù)了,所以還是要注意的!

下面給出來(lái)全部的代碼:

  1. mainwindow.h
#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
  1. mainwindow.cpp
#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 沒(méi)有修改,這里就不給出了。下面是運(yùn)行結(jié)果:

很丑,是吧?不過(guò)我們已經(jīng)添加上了菜單和工具條了哦!按一下鍵盤(pán)上的 Alt+F,因?yàn)檫@是我們給它定義的快捷鍵。雖然目前挺難看,不過(guò)以后就會(huì)變得漂亮的!想想看,Linux 的 KDE 桌面可是 Qt 實(shí)現(xiàn)的呢!

本文出自 “豆子空間” 博客,請(qǐng)務(wù)必保留此出處 http://devbean.blog.51cto.com/448512/194031

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)