Qt创建菜单栏 本篇博文讲菜单栏的创建以及添加子菜单和选项(我也不知道这个翻译成什么好,请原谅野生自学者的学识浅薄)。 先说下我的开发环境,我的操作系统是Arch Linux,使用的桌面是KDE,Qt版本是5.9.9。 那么首先是创建菜单,这里我们需要一个继承了QMainWindow类的类,这里我是用Qt Creator创建的QMainWindow项目。 那么这是我用Qt Creator创建的项目的源码(此时我仅仅在代码里加了些注释以便读者区分是哪些文件),我在创建的时候并没有选择生成form(即UI文件)。 这是生成的项目文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 # untitled4.pro QT += core gui greaterThan(QT_MAJOR_VERSION, 4 ): QT += widgets CONFIG += c++11 # The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated (the exact warnings # depend on your compiler). Please consult the documentation of the # deprecated API in order to know how to port your code away from it. DEFINES += QT_DEPRECATED_WARNINGS # You can also make your code fail to compile if it uses deprecated APIs. # In order to do so, uncomment the following line. # You can also select to disable deprecated APIs only up to a certain version of Qt. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0 .0 SOURCES += \ main.cpp \ mainwindow.cpp HEADERS += \ mainwindow.h # Default rules for deployment. qnx : target.path = /tmp/ $${TARGET}/binelse : unix :!android : target.path = /opt/ $${TARGET}/bin!isEmpty(target.path): INSTALLS += target
这是头文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> class MainWindow : public QMainWindow{ Q_OBJECT public : MainWindow (QWidget *parent = nullptr ); ~MainWindow (); }; #endif
这是生成的cpp文件:
1 2 3 4 5 6 7 8 9 10 11 12 #include "mainwindow.h" MainWindow::MainWindow (QWidget *parent) : QMainWindow (parent) { } MainWindow::~MainWindow () { }
这是生成的main.cpp文件:
1 2 3 4 5 6 7 8 9 10 11 12 #include "mainwindow.h" #include <QApplication> int main (int argc, char *argv[]) { QApplication a (argc, argv) ; MainWindow w; w.show (); return a.exec (); }
创建菜单栏 好了,在开始之前我们先运行代码,看看QMainWindow裸奔起来是什么样子: 周围蓝色的是我的窗口装饰,与咱运行的QMainWindow无关。 那么接下来创建菜单。先声明一下,由于我的输入法唤起快捷键与Qt Creator的某快捷键冲突,所以注释我就用英文写了。 修改mainwindow.cpp文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include "mainwindow.h" #include <QMenuBar> #include <QMenu> MainWindow::MainWindow (QWidget *parent) : QMainWindow (parent) { resize (500 , 500 ); QMenuBar* qmb_p = menuBar (); QMenu* file_p = qmb_p -> addMenu ("File" ); } MainWindow::~MainWindow () { }
可以看到,我包含了QMenuBar和QMenu这两个库。这里说一下menuBar(),它返回一个QMenuBar类型的指针。想要了解更多的细节请看Qt的帮助文档。 然后就是qmb_p -> addMenu(“File”)了,它添加了一个叫做File的子菜单,其中addMenu()返回了一个QMenu类型的指针。 这里是运行效果: 。
添加选项 然后我们可以给子菜单里添加选项(即Action),依然修改mainwindow.cpp:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include "mainwindow.h" #include <QMenuBar> #include <QMenu> #include <QAction> MainWindow::MainWindow (QWidget *parent) : QMainWindow (parent) { resize (500 , 500 ); QMenuBar* qmb_p = menuBar (); QMenu* file_p = qmb_p -> addMenu ("File" ); QAction* new_p = file_p -> addAction ("New" ); } MainWindow::~MainWindow () { }
这里我导入了QAction库,调用了file_p的addAction()成员函数并将其赋值给了new_p。addAction返回一个QAction类型的指针。addAction添加了一个Action(我个人称其为选项)。 这是运行结果(由于我不想做GIF,所以这是单击子菜单”File”后的结果): 可以看到,”File”子菜单下有了一个Action(选项)。 可以添加多个Menu和多个Action,本来想要一一展示的,但是由于现在已经22:11了,待会儿还要写状态栏,于是我就不写了,读者知道可以添加多个就行。
那么本篇完,我要开始写下一篇了这一篇我居然写了一个多小时,果然我语言组织能力不行。