程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> Qt學習之路(12):菜單和工具條

Qt學習之路(12):菜單和工具條

編輯:關於C++

在前面的QMainWindow的基礎之上,我們開始著手建造我們的應用程序。雖然現在已經有一個框架,但是,確切地說我們還一行代碼沒有寫呢!下面的工作就不那麼簡單了!在這一節裡面,我們要為我們的框架添加菜單和工具條。

就像Swing裡面的Action一樣,Qt裡面也有一個類似的類,叫做QAction。顧名思義,QAction類保存有關於這個動作,也就是action的信息,比如它的文本描述、圖標、快捷鍵、回調函數(也就是信號槽),等等。神奇的是,QAction能夠根據添加的位置來改變自己的樣子 ——如果添加到菜單中,就會顯示成一個菜單項;如果添加到工具條,就會顯示成一個按鈕。這也是為什麼要把菜單和按鈕放在一節裡面。下面開始學習!

首先,我想添加一個打開命令。那麼,就在頭文件裡面添加一個私有的QAction變量:

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

注意,不要忘記QAction類的前向聲明哦!要不就會報錯的!

然後我們要在cpp文件中添加QAction的定義。為了簡單起見,我們直接把它定義在構造函數裡面:

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

第一行代碼創建一個QAction對象。QAction有幾個重載的構造函數,我們使用的是

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

這一個。它有兩個參數,第一個text是這個動作的文本描述,用來顯示文本信息,比如在菜單中的文本;第二個是parent,一般而言,我們通常傳入this指針就可以了。我們不需要去關心這個parent參數具體是什麼,它的作用是指明這個QAction的父組件,當這個父組件被銷毀時,比如 delete或者由系統自動銷毀,與其相關聯的這個QAction也會自動被銷毀。

如果你還是不明白構造函數的參數是什麼意思,或者說想要更加詳細的了解QAction這個類,那麼就需要自己翻閱一下它的API文檔。前面說過有關API的使用方法,這裡不再贅述。這也是學習Qt的一種方法,因為Qt是一個很大的庫,我們不可能面面俱到,因此只為說道用到的東西,至於你自己想要實現的功能,就需要自己去查文檔了。

第二句,我們使用了setShortcut函數。shortcut是這個動作的快捷鍵。Qt的QKeySequence已經為我們定義了很多內置的快捷鍵,比如我們使用的Open。你可以通過查閱API文檔獲得所有的快捷鍵列表,或者是在QtCreator中輸入::後會有系統的自動補全功能顯示出來。這個與我們自己定義的有什麼區別呢?簡單來說,我們完全可以自己定義一個tr("Ctrl+O")來實現快捷鍵。原因在於,這是Qt跨平台性的體現。比如PC鍵盤和Mac鍵盤是不一樣的,一些鍵在PC鍵盤上有,而Max鍵盤上可能並不存在,或者反之,所以,推薦使用QKeySequence類來添加快捷鍵,這樣,它會根據平台的不同來定義不同的快捷鍵。

第三句是setStatusTip函數。這是添加狀態欄的提示語句。狀態欄就是主窗口最下面的一條。現在我們的程序還沒有添加狀態欄,因此你是看不到有什麼作用的。

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

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

QMainWindow有一個menuBar()函數,會返回菜單欄,也就是最上面的那一條。如果不存在會自動創建,如果已經存在就返回那個菜單欄的指針。直接使用返回值添加一個菜單,也就是addMenu,參數是一個QString,也就是顯示的菜單名字。然後使用這個QMenu指針添加這個 QAction。類似的,使用addToolBar函數的返回值添加了一個工具條,並且把這個QAction添加到了上面。

好了,主要的代碼已經寫完了。不過,如果你只修改這些的話,是編譯不過的哦!因為像menuBar()函數返回一個QMenuBar指針,但是你並沒有include它的頭文件哦!雖然沒有明著寫出QMenuBar這個類,但是實際上你已經用到了它的addMenu函數了,所以還是要注意的!

下面給出來全部的代碼:

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

2. 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沒有修改,這裡就不給出了。下面是運行結果:

很丑,是吧?不過我們已經添加上了菜單和工具條了哦!按一下鍵盤上的Alt+F,因為這是我們給它定義的快捷鍵。雖然目前挺難看,不過以後就會變得漂亮的!想想看,Linux的KDE桌面可是Qt實現的呢!

出處: http://devbean.blog.51cto.com/448512/205034

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved