qt中的菜单QMenu QAction

Qt 专栏收录该内容
77 篇文章 7 订阅

传送门: qt中的菜单QMenu QAction


Qt中要建立菜单,有三个类很重要:

[cpp]  view plain  copy
  1. QMenuBar(QWidget * parent = 0)  
  2. QMenu(QWidget * parent = 0)   
  3. QMenu(const QString & title, QWidget * parent = 0)  
  4. QAction(QObject * parent)   
  5. QAction(const QString & text, QObject * parent)   
  6. QAction(const QIcon & icon, const QString & text, QObject * parent)  

QMenuBar:就是所有窗口的菜单栏,在此基础上添加不同的QMenu和QAction

QMenu:菜单栏里面菜单,可以显示文本和图标,但是并不负责执行操作,有点类似label的作用

QAction: Qt 将用户与界面进行交互的元素抽象为一种“动作”,使用QAction类表示。QAction才是真正负责执行操作的部件。

建立一个菜单栏,基本上要三步:

[cpp]  view plain  copy
  1. #ifndef MAINWINDOW_H  
  2. #define MAINWINDOW_H  
  3.   
  4. #include <QMainWindow>  
  5. #include <QMenu>  
  6. #include <QMenuBar>  
  7. #include <QStatusBar>  
  8.   
  9. class MainWindow : public QMainWindow  
  10. {  
  11.     Q_OBJECT  
  12.   
  13. public:  
  14.     MainWindow(QWidget *parent = 0);  
  15.     ~MainWindow();  
  16.   
  17.     QMenu* menu[10];  
  18.     QAction* act[10];  
  19.     QMenuBar* menuBar ;  
  20.     QStatusBar* status ;  
  21. public slots:  
  22.     void trigerMenu(QAction* act);  
  23. };  
  24.   
  25. #endif // MAINWINDOW_H  

[cpp]  view plain  copy
  1. #include "mainwindow.h"  
  2. #include <Qt>  
  3. #include <QtDebug>  
  4.   
  5. MainWindow::MainWindow(QWidget *parent)  
  6.     : QMainWindow(parent)  
  7. {  
  8.     this->resize(400,300);  
  9.     this->centralWidget();  
  10.   
  11.     status = new QStatusBar(this);  
  12.   
  13.     menu[0] = new QMenu("文件");  
  14.     menu[0]->addAction("编辑");  
  15.     menu[0]->addAction("查看");  
  16.     menu[0]->addAction("工具");  
  17.   
  18.     act[0] = new QAction("新建",this);  
  19.     act[0]->setShortcut(Qt::CTRL | Qt::Key_A );  
  20.     act[0]->setStatusTip("这是一个新建菜单");  
  21.   
  22.     act[1] = new QAction("打开",this);  
  23.     act[1]->setCheckable(true);  
  24.   
  25.     menu[1] = new QMenu("保存");  
  26.     menu[1]->addAction(act[0]);  
  27.     menu[1]->addAction(act[1]);  
  28.   
  29.     menu[2] = new QMenu("打印");  
  30.     menu[2]->addAction("打印设置");  
  31.     menu[2]->addMenu(menu[1]);  
  32.   
  33.     menuBar = new QMenuBar(this);  
  34.     menuBar->addMenu(menu[0]);  
  35.     menuBar->addMenu(menu[2]);  
  36.     menuBar->setGeometry(0,0,this->width(),30);  
  37.   
  38.     connect(menuBar,SIGNAL(triggered(QAction*)),this,SLOT(trigerMenu(QAction*)));  
  39. }  
  40.   
  41. MainWindow::~MainWindow()  
  42. {  
  43.   
  44. }  
  45.   
  46. void MainWindow::trigerMenu(QAction* act)  
  47. {  
  48.     if(act->text() == "新建")  
  49.     {  
  50.         qDebug()<<"新建菜单被按下";  
  51.     }  
  52. }  

[cpp]  view plain  copy
  1. #include "mainwindow.h"  
  2. #include <QApplication>  
  3.   
  4. int main(int argc, char *argv[])  
  5. {  
  6.     QApplication a(argc, argv);  
  7.     MainWindow w;  
  8.     w.show();  
  9.   
  10.     return a.exec();  
  11. }  




  • 2
    点赞
  • 0
    评论
  • 2
    收藏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:技术黑板 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值