官术网_书友最值得收藏!

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 彈出菜單設計程序運行界面

主站蜘蛛池模板: 卓尼县| 敦煌市| 吉隆县| 白银市| 来安县| 六枝特区| 右玉县| 鲁甸县| 民和| 鄂托克旗| 长泰县| 翁源县| 龙胜| 普兰店市| 望江县| 电白县| 辽宁省| 惠安县| 铜陵市| 连云港市| 诸城市| 靖安县| 集安市| 故城县| 墨脱县| 松潘县| 灌阳县| 牡丹江市| 灌南县| 长白| 蓬安县| 马关县| 九江市| 普洱| 施秉县| 嵊泗县| 镇原县| 伊春市| 靖边县| 乐业县| 广平县|