QT之建立一個基本的菜單窗口

#include "mainwindow.h"
#include<QPushButton>
#include<QDebug>
#include<QMenuBar>
#include<QMenu>
#include<QAction>
#include<QToolBar>
#include<QStatusBar>
#include<QLabel>
#include<QTextEdit>
#include<QDockWidget>
#include<QDialog>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    //菜單欄
    QMenuBar *mBar = menuBar();

    //添加菜單
    QMenu *pFile = mBar->addMenu("文件");

    //添加菜單項,添加動作
    QAction * pNew = pFile->addAction("新建");

    connect(pNew,&QAction::triggered,
            [=]()
    {
    qDebug()<<"新建";
    }

            );
    pFile->addSeparator();
    QAction *pOpen = pFile->addAction("打開");

    //工具欄  菜單欄的快捷方式
    QToolBar * toolBar = addToolBar("toolBar");

    //工具欄添加快捷鍵
    toolBar->addAction(pNew);
    QPushButton *a = new QPushButton(this);
    a->setText("^_^");
    toolBar->addWidget(a);
    connect(a,&QPushButton::clicked,
            [=]()
            {
            a->setText("123");
            }

            );
    //狀態欄
    QStatusBar * sBar = statusBar();
    QLabel *label = new QLabel(this);
    label->setText("Normal text file");
    sBar->addWidget(label);
    //addWidget從左往右添加
    sBar->addWidget(new QLabel("11",this));

    //從右往左添加
    sBar->addPermanentWidget(new QLabel("22",this));

    //核心控件
    QTextEdit * textEdit = new QTextEdit(this);
    setCentralWidget(textEdit);
    //浮動窗口
    QDockWidget *dock = new QDockWidget(this);

    //給浮動窗口加控件
    addDockWidget(Qt::RightDockWidgetArea,dock);
    QTextEdit * textEdit2 = new QTextEdit(this);
    dock->setWidget(textEdit2);

    //添加模態對話框

    QMenu * pDlg = mBar->addMenu("對話框");
    QAction * p = pDlg->addAction("模態對話框");
    connect(p,&QAction::triggered,
            [=]()
    {
            QDialog a;
            a.exec();
    }
            );
    QAction * q=  pDlg->addAction("非模態對話框");
    connect(q,&QAction::triggered,
            [=]()
    {
            QDialog *a = new QDialog(this);
            a->show();
            /*
              不指定父對象
            QDialog *dlg1 = new QDialog;
            dlg1->setAttribute(Qt::WA_DeleteOnClose);//關閉對話框後釋放內存
            dlg1->show();
*/
    }
            );

    resize(400,300);
}

MainWindow::~MainWindow()
{
}

1.首先需建立一個菜單欄

所謂菜單欄,就是放文件 編輯 構建...這些選項的地方

實現:

需要使用到的頭文件

#include<QMenuBar>

源代碼 

 

QMenuBar * mBar = menuBar();

在QWidget類中有一個menuBar()的函數,這個函數的解釋如下

大體意思就是返回返回一個空的菜單欄的指針,並將這個空的菜單欄顯示在主窗口上

 

2.創建一個菜單按鈕

菜單按鈕是什麼呢?就是下圖中這些文件 編輯 構建這些按鈕

 

需要的頭文件

#include<QMenu>

源代碼

QMenu * pFile = mBar->addMenu("文件")

這樣是創建一個名爲“文件”的菜單按鈕,並返回一個指向該菜單按鈕的指針

運行結果

3.創建菜單選項

菜單選項就是點擊菜單按鈕後,下拉出來的選項,如

這些就是很多個菜單選項

 

需要的頭文件

#include<QAction>

QAction類提供了抽象的用戶界面action,這些action可以被放置在窗口部件中。

源代碼

QAction *pNew = pFile->addAction("新建");
pFile->addSeparator();
QAction *pNew = pFile->addAction("打開");
pFile->addSeparator()是用來分隔新建和打開兩個菜單選項,效果如下

運行結果

 

4.點擊新建後可打印“新建”

 

需要用到的模塊

CONFIG +=C++11

需要的頭文件

#include<QDebug>

源代碼

connect(pNew,&QAction::triggered,
[]()
{
    qDebug()<<"新建";
    //qDebug()相當於cout
}

);

運行結果

 

點擊新建後輸出“新建”

 

5.添加一個工具欄,並添加一個新建的快捷按鈕以及自定義的按鈕 

需要的頭文件

#include<QToolBar>
#include<QPushBotton>

源代碼

//工具欄  菜單欄的快捷方式
    QToolBar * toolBar = addToolBar("toolBar");

//工具欄添加快捷鍵
    toolBar->addAction(pNew);
    QPushButton *a = new QPushButton(this);
    a->setText("^_^");
    toolBar->addWidget(a);
    //槽函數與信號
    connect(a,&QPushButton::clicked,
            [=]()
            {
            a->setText("123");
            }

            );

運行結果如下

按下新建,則也可以輸出“新建”

 

6.添加狀態欄,並添加標籤

 

需要的頭文件

#include<QStatusBar>
#include<Label>

源代碼

//添加狀態欄
    QStatusBar * sBar = statusBar();
//添加標籤
    QLabel *label = new QLabel(this);
    label->setText("Normal text file");
    sBar->addWidget(label);
    //addWidget從狀態欄最左邊往右添加
    sBar->addWidget(new QLabel("11",this));

    //從狀態欄最右邊往左添加
    sBar->addPermanentWidget(new QLabel("22",this));

運行結果

 

7.添加一個核心組件(文本編輯區)

需要的頭文件

#include<QTextEdit>

源代碼

QTextEdit *textEdit = new QTextEdit(this);
//將文本編輯組件放在主窗口的中央
setCentralWidget(textEdit);

 

運行結果

 

8.添加浮動窗口

 

需要的頭文件

#include<QDockWidget>

 

源代碼

//浮動窗口
    QDockWidget *dock = new QDockWidget(this);

    //給浮動窗口加控件
    addDockWidget(Qt::RightDockWidgetArea,dock);
    QTextEdit * textEdit2 = new QTextEdit(this);
    dock->setWidget(textEdit2);

運行結果

 

9.添加模態對話框與非模態對話框

模態對話框彈出後無法操作主窗口,而非模態對話框可以操作

模態對話框就是調用的時候使用exec(),非模態對話框是使用show()來調用。

需要的頭文件

#include<QDialog>

源代碼

//添加模態對話框

    QMenu * pDlg = mBar->addMenu("對話框");
    QAction * p = pDlg->addAction("模態對話框");
    connect(p,&QAction::triggered,
            [=]()
    {
            QDialog a;
            a.exec();
    }
            );
    QAction * q=  pDlg->addAction("非模態對話框");
    connect(q,&QAction::triggered,
            [=]()
    {
            QDialog *a = new QDialog(this);
            a->show();
            /*
              不指定父對象
            QDialog *dlg1 = new QDialog;
            dlg1->setAttribute(Qt::WA_DeleteOnClose);//關閉對話框後釋放內存
            dlg1->show();
*/
    }
            );

 

運行結果

 

這個與浮動窗口是不一樣的,浮動窗口可以附在主窗口裏

如這個是浮動窗口

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章