Qt基础之页面

  本篇介绍Qt菜单栏相关操作,分为三部分:1.菜单栏相关的类介绍;2.系统菜单的生成和响应;3.弹出菜单的生成和响应;菜单栏通常只有以QMainWindow为基类的程序中才用到,以QWidget为基类的程序通常没有菜单栏。

1. 菜单相关类

  QMenuBar --菜单栏类,即下图中红色区域标记,菜单栏类给窗口提供水平菜单栏,此菜单栏占用窗口上方区域,垂直高度不变,水平宽度为窗口宽度,可随窗口大小变化而变化。如下图中“测试”,“test1”,"test2"所在的栏几位QMenuBar

  QMenu --菜单项,即下图中绿色区域,下图中“测试”,"test1","test2"都是一个独立的菜单,包含各个子菜单。QMenu还可以用来创建弹出菜单。

  QAction --子菜单,即下图中蓝色区域标记的内容,一个子菜单对应一个操作。

2.系统菜单的生成和响应

2.1.使用代码添加系统菜单

示例源码:

.h文件

 1#ifndef MAINWINDOW_H

2#define MAINWINDOW_H

3

4 #include <QMainWindow>

5 #include <QMenuBar>

6

7QT_BEGIN_NAMESPACE

8namespace Ui { class MainWindow; }

9QT_END_NAMESPACE

10

11class MainWindow : public QMainWindow

12{

13 Q_OBJECT

14

15public:

16 MainWindow(QWidget *parent = nullptr);

17 ~MainWindow();

18

19//菜单栏

20 QMenuBar *pMenuBar;

21//菜单项

22 QMenu *pMenuTest;

23 QMenu *pMenuTest1;

24 QMenu *pMenuTest2;

25//子菜单

26 QAction *pActionTest;

27 QAction *pActionTest1;

28 QAction *pActionTest2;

29 QAction *pActionTest3;

30 QAction *pActionTest4;

31 QAction *pActionTest5;

32 QAction *pActionTest6;

33

34public slots:

35//菜单响应函数

36void OnActionTest();

37void OnActionTest1();

38

39private:

40 Ui::MainWindow *ui;

41};

42#endif// MAINWINDOW_H

.cpp文件

 

 1 #include "mainwindow.h"

2 #include "ui_mainwindow.h"

3 #include <QDialog>

4

5//是否启用QMainWindow自带的菜单栏

6//#define USE_DEFAULT_MENU_BAR

7

8 MainWindow::MainWindow(QWidget *parent)

9 : QMainWindow(parent)

10 , ui(new Ui::MainWindow)

11{

12 ui->setupUi(this);

13

14//指定菜单栏

15#ifdef USE_DEFAULT_MENU_BAR

16//添加菜单栏(此处添加为的为QMainWindow自带的菜单)

17 pMenuBar = this->menuBar();

18#else

19//添加自定义菜单

20 pMenuBar = new QMenuBar(this);

21#endif

22

23//定义菜单项

24//(&n)代表快捷方式,当窗口获得焦点时按alt+n即可打开“测试”菜单项

25 pMenuTest = new QMenu("测试(&n)",this);

26 pMenuTest1 = new QMenu("test1",this);

27 pMenuTest2 = new QMenu("test2",this);

28

29//定义子菜单

30//(&s)为子菜单快捷键,当打开该菜单项后,按下‘s’键即可响应

31 pActionTest = new QAction("测试(&s)",this);

32//新建一个带图标的菜单项,图标使用资源文件中的资源

33 pActionTest1 = new QAction(QIcon(":/new/prefix1/resource/soccer_ball.ico"),"测试1",this);

34 pActionTest2 = new QAction("测试2",this);

35 pActionTest3 = new QAction("测试3(&Y)",this);

36 pActionTest4 = new QAction("测试4",this);

37 pActionTest5 = new QAction("测试5(&M)",this);

38 pActionTest6 = new QAction("测试6",this);

39

40//将菜单项添加到子菜单

41 pMenuTest->addAction(pActionTest);

42 pMenuTest->addAction(pActionTest1);

43//在菜单项之间添加分割线

44 pMenuTest->addSeparator();

45 pMenuTest->addAction(pActionTest2);

46

47 pMenuTest1->addAction(pActionTest3);

48 pMenuTest1->addAction(pActionTest4);

49

50 pMenuTest2->addAction(pActionTest5);

51 pMenuTest2->addAction(pActionTest6);

52

53//将子菜单添加到菜单栏

54 pMenuBar->addMenu(pMenuTest);

55 pMenuBar->addMenu(pMenuTest1);

56 pMenuBar->addMenu(pMenuTest2);

57

58#ifndef USE_DEFAULT_MENU_BAR

59//当不使用QMainWindow自带的菜单栏时,必须要加上此行

60 setMenuBar(pMenuBar);

61#endif

62

63//添加菜单响应函数

64 connect(pActionTest,&QAction::triggered,this,&MainWindow::OnActionTest);

65 connect(pActionTest1,&QAction::triggered,this,&MainWindow::OnActionTest);

66}

67

68

69//菜单响应函数

70void MainWindow::OnActionTest()

71{

72 QDialog dlg;

73 dlg.setWindowTitle("测试菜单响应");

74 dlg.exec();

75}

76

77void MainWindow::OnActionTest1()

78{

79

80 QDialog dlg;

81 dlg.setWindowTitle("测试菜单响应");

82 dlg.exec();

83}

84

85 MainWindow::~MainWindow()

86{

87delete ui;

88 }

 

  上面的代码中定义了两种创建系统菜单的方式:调用QMainWindow自带的菜单栏和自己新建菜单栏,由第6行定义的宏控制,显示效果相同。

  第25行为“测试”子菜单添加快捷键,当窗口获得焦点时按alt+n可展开“测试”子菜单。

  第31行为“测试”子菜单“测试”菜单项添加快捷键,当“测试”子菜单弹出后按‘s’键,程序即可做出响应。

  第33行为“测试”子菜单的“测试2”菜单项添加了图标。

  第44行为“测试”子菜单的“测试2”和“测试3”之间添加了分割线。

2.2.使用UI设计器设计系统菜单

  进入“设计”页面,进入如下图所示的界面,具体操作方法见如下两张图,注意:输入菜单名称后一定要按“Enter”键才能生效

Qt基础之页面

Qt基础之页面

 

以上是 Qt基础之页面 的全部内容, 来源链接: utcz.com/a/65886.html

回到顶部