2.2 菜單
2.2.1 設計菜單
(1)打開資源文件,參照2.1.3節步驟添加一些圖標,這些圖標在后面的菜單項設計中使用,如圖2-10所示。

圖2-10 菜單圖標資源
(2)在設計模式下,打開樣式文件,輸入菜單名和菜單項,如圖2-11所示。

圖2-11 添加菜單名和菜單項
(3)在屬性面板中,單擊icon右側按鈕添加圖標,如圖2-12所示。

圖2-12 菜單屬性面板
(4)在資源對話框中,為每個菜單項添加圖標,如圖2-13所示。

圖2-13 添加菜單圖標
(5)每個菜單項添加圖標后,效果如圖2-14所示。

圖2-14 菜單設計效果
(6)在添加菜單項時,在動作編輯面板中,同時定義了與菜單項對應的動作,實際上Qt對菜單項的定義就是動作,如圖2-15所示。

圖2-15 菜單動作編輯面板
(7)在動作編輯面板中選擇其中一個動作后右擊,在彈出的快捷菜單中選擇go to slot命令,在出現的對話框中,選擇triggered()信號(見圖2-16),Qt Designer自動在MainWindow的頭文件和源文件中添加該信號的響應操作。

圖2-16 選擇菜單響應操作
其中,菜單項操作的代碼如下:
void MainWindow::on_action_O_triggered() { //輸入以下用戶代碼 QMessageBox::information(this, "消息","選擇了打開菜單項"); } void MainWindow::on_action_S_triggered() { //輸入以下用戶代碼 QMessageBox::information(this, "消息","選擇了保存菜單項"); } void MainWindow::on_action_E_triggered() { //輸入以下用戶代碼 QMessageBox::information(this, "消息","選擇了退出菜單項"); //關閉窗口,退出 close(); }
2.2.2 編寫菜單代碼
2.2.1節介紹了如何用Qt Designer設計實現菜單的操作,本節我們用編寫程序代碼實現菜單的設置。通過編碼實現,可以更容易地理解Qt菜單的實現過程和運行機制,以后可以更方便地創建彈出式等其他菜單。
(1)首先在頭文件中,需要添加菜單變量、菜單項的動作變量和響應菜單動作的操作。這里需要簡單了解一個新的概念: 信號/槽(slot)。信號/槽是Qt建立兩個部件間事件關聯的重要方法,即一個部件發出信號,另一個部件通過槽來響應發出的信號。關于信號和槽,我們在第3章專門介紹。
private: Ui::MainWindow *ui; QMenu *aboutMenu; QAction *aboutAct; private slots: void on_action_E_triggered(); void on_action_S_triggered(); void on_action_O_triggered(); void about();
(2)在MainWindow構造函數中,添加初始化動作和菜單,該段代碼解釋了如何添加帶圖標的菜單項,如何在菜單項和操作間建立關聯。
aboutAct=new QAction(QIcon(":/logo.png"),tr("&A關于"), this); connect(aboutAct, SIGNAL(triggered()), this, SLOT(about())); aboutMenu=menuBar()->addMenu(tr("&A關于")); aboutMenu->addAction(aboutAct);
(3)實現相應操作。
void MainWindow::about() { //輸入以下用戶代碼 QMessageBox::about(this, "消息","選擇了菜單項"); }
(4)編譯運行,如圖2-17所示。

圖2-17 菜單設計程序運行界面
2.2.3 彈出式菜單
了解了如何設計菜單和編寫菜單代碼,彈出式菜單操作就很簡單了。首先重載主窗口的void mousePressEvent(QMouseEvent * event)操作,響應窗口中的鼠標右鍵信息。然后,在void mousePressEvent(QMouseEvent * event)操作中,直接在需要單擊的位置彈出已經建立的菜單即可,下面的代碼給出了上述兩種菜單的彈出顯示方法。
(1)在頭文件中增加操作聲明:
void mousePressEvent(QMouseEvent * event); …
(2)源文件中增加包含文件和mousePressEvent 操作的實現:
#include<QMouseEvent> … void MainWindow::mousePressEvent(QMouseEvent * event) { //右鍵顯示自己編碼生成的菜單 if(event->button()==Qt::RightButton){ aboutMenu->popup(event->globalPos()); } //左鍵顯示QtDesigner 生成的菜單 if(event->button()==Qt::LeftButton){ ui->menu_F->popup(event->globalPos()); } }
(3)編譯運行,效果如圖2-18所示。

圖2-18 彈出菜單設計程序運行界面
- Mastering Entity Framework Core 2.0
- 跟小海龜學Python
- 機器人Python青少年編程開發實例
- INSTANT Weka How-to
- Java深入解析:透析Java本質的36個話題
- MySQL數據庫管理與開發實踐教程 (清華電腦學堂)
- Mastering RStudio:Develop,Communicate,and Collaborate with R
- Android開發案例教程與項目實戰(在線實驗+在線自測)
- C和C++游戲趣味編程
- Java程序設計案例教程
- Citrix XenServer企業運維實戰
- Python Interviews
- JavaScript+jQuery網頁特效設計任務驅動教程
- Kotlin Programming By Example
- Clojure Polymorphism