Qt學習之QMainWindow(一)QMainWindow簡介
(詳細的後續會講到,這裡重在理解過程)
Qt中的頂層視窗稱為MainWindow,屬於類QMainWindow,QMainWindow也是繼承於QWidget。通過子類化QMainWindow可以建立一個應用程式的視窗。
MainWindow的結構分為五個部分:選單欄(Menu Bar)、工具欄(Toolbars)、停靠視窗(Dock Widgets)、狀態列(Status Bar)和中央視窗(Central Widget)。可以用下面的圖形表示之。
其中,中央視窗可以使用任何形式的widget來填充。一般不建議使中央視窗為空。可以使用setCentralWidget()函式來填充中央視窗。
一、Menu Bar
首先要區分好選單與選單欄。選單是QMenu物件,然後將多個QMenu物件放置在一個QMenuBar(選單欄)物件中。對於每個選單,我們再為其添置動作列表,即QAction物件。步驟如下
mainwindow.h
mainwindow.cpp#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QtGui/QMainWindow> class QAction; class QMenu; class MainWindow : public QMainWindow { Q_OBJECT protected: QAction *openAction; //定義一個動作 QMenu *fileMenu; //定義一個選單 public: MainWindow(QWidget *parent = 0); ~MainWindow(); }; #endif // MAINWINDOW_H
<pre name="code" class="cpp"><pre name="code" class="cpp">#include "mainwindow.h" #include <QMenu> #include <QMenuBar> #include <QAction> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { openAction = new QAction(tr("Open"),this); //初始化動作 fileMenu = new QMenu; //建立一個選單 fileMenu = menuBar()->addMenu(tr("File")); //將選單新增到選單欄上 fileMenu->addAction(openAction); //將動作新增到選單上 } MainWindow::~MainWindow() { }
執行結果如下:
思路已經很清晰了,首先建立一個選單File,將它新增到選單欄上,然後再將動作Open新增到此選單下。其中,注意到選單欄是單數,即Menu Bar中的Bar是單數(這裡跟工具欄要區分開),QMainWindw類中有一個叫MenuBar()的函式,用來返回MainWindow的選單欄(一個QMenuBar物件),然後QMenuBar類中有一個addMenu()函式用來新增一個選單到選單欄中。
二、ToolBars
為什麼我要強調選單欄中是單數而工具欄中是複數,這是為了理解兩種Bar的不同用法。
首先,在MainWindw中選單欄並不止一個,可以自己建立,所以並不是從QMainWindow中的哪個函式來返回哪個工具欄。因此,第一步要建立一個工具欄。在QMainWindow類中有addToolBar()函式來新增工具欄,然後根據QToolBar類中的addAction()函式來為新建的工具欄新增動作。具體示例程式碼如下:
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QtGui/QMainWindow>
class QAction;
class QToolBar;
class MainWindow : public QMainWindow
{
Q_OBJECT
protected:
QAction *openAction; //定義一個動作
QToolBar *fileToolBar; //定義一個工具欄
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include <QToolBar>
#include <QAction>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
openAction = new QAction(tr("Open"),this); //初始化動作
fileToolBar = new QToolBar; //建立一個工具欄
fileToolBar = addToolBar(tr("File")); //新增工具欄到頂層視窗中
fileToolBar->addAction(openAction); //為新建的工具欄新增動作
}
MainWindow::~MainWindow()
{
}
這個過程很清晰了。
總結一下:
選單欄是MainWindow中已經有的,需要是就使用menuBar()函式來返回;工具欄需要自己新建,然後在通過addToolBar()函式新增到視窗中。
其它的部分會在其它的部落格中給出。