1. 程式人生 > >Qt學習之QMainWindow(一)QMainWindow簡介

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

#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
mainwindow.cpp
<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()函式新增到視窗中。

其它的部分會在其它的部落格中給出。