前面幾節學習使用的 Qt 項目都是以 QWidget 爲基類的,QWidget 是所有控件的基類,以 QWidget 爲基類創建的項目是一個空窗口。
如果想創建一個包含菜單欄、工具欄、狀態欄的窗口,可以在創建項目時,將基類改爲 QMainWindow,此處先不勾選“創建界面”,因爲要先用代碼來實現菜單欄的創建過程。如下所示:
從幫助文檔可以看到,QMainWindow 下面有很多公共方法,其中 menuBar() 方法就是用於創建菜單欄對象,如下:
通過代碼創建菜單欄如下所示:
MyMainWindow::MyMainWindow(QWidget *parent)
: QMainWindow(parent)
{
this->resize(400, 300);
// 創建菜單欄對象
QMenuBar *mbar = this->menuBar();
// 添加菜單
QMenu *fileMenu = mbar->addMenu("文件(F)");
QMenu *editMenu = mbar->addMenu("編輯(E)");
// 添加菜單項
QAction *newAction = fileMenu->addAction("新建(N)");
// 爲“新建”菜單項綁定槽函數,點擊新建的時候,輸出一句話
connect(newAction, &QAction::triggered, [=](){
qDebug() << "新建文件";
});
// 添加分割線
fileMenu->addSeparator();
// 添加菜單項
QAction *openAction = fileMenu->addAction("打開(O)");
}
如果在創建 Qt 項目時,勾選了“創建界面”,如下:
那麼就可以在界面設計器上快速的編輯菜單欄:
注意:在編輯菜單項名稱的時候,發現不能輸入中文,此時,我們可以先給菜單項輸入一個英文,如下:
然後,我們就可以在屬性視圖下看到這個菜單項對象了:
注意:有一個屬性 objectName,其值(actionNew)就是根據我們在菜單項中輸入的名稱(new)自動生成的;假如,允許我們在菜單項中輸入中文,比如我寫個“新建”,那麼 objectName 的值就會變成 “action新建”,這顯然是不合理的;
如果需要在菜單項上顯示中文,那麼可以修改其 text 屬性;
,