一,前言
之前我把小目标进行了调整,提及了制作上位机工具,那么就需要做一个像样的上位机工具,就像我们平时PC上安装的APP一样。而暂时我选择用QT。那么我先看了下别人在github上基于QT开发的c++ PC代码工程,给我提供了开发思路及创作灵感。做大型工程前,我需要通过刻意练习来熟悉API。
二,小练习目标
既然是PC桌面程序,那么最基本的就是窗体,本次练习的目标如下
1.经典老式的窗口(非window ribbon格式)。包括菜单栏,工具栏,和状态栏。
2.不生成ui,窗口自动布局。包括设置基本的输入输出控件。
3.缩小后的托盘及右键功能。
定义了目标,等于定义了软件主要功能需求,那么我可以开始动手了。
三,问题记录
1. 没有UI界面我如何创建菜单栏?
解决方法:创建QMenu和QAction,并添加到QMenuBar对象。
QMenuBar: 就是所有窗口的菜单栏,在此基础上添加不同的QMenu和QAction。
QMenu: 菜单栏里面菜单,可以显示文本和图标,但是并不负责执行操作,有点类似label的作用。
QAction: Qt 将用户与界面进行交互的元素抽象为一种“动作”,使用QAction类表示。QAction才是真正负责执行操作的部件。
2. Menubar通过layout设置后底色及宽度都不对?
解决方法:参考官网example,路径为QT安装路径,D:\Qt\Examples\Qt-6.0.2\widgets\mainwindows\application。原因是我创建的是widget类而不是mainwindows类。然后创建的menubar绑定到mainwindows类中的menubar即可。QMenuBar* pMenuBar = menuBar();//new QMenuBar();
所以对于menubar不需要设置layout置顶。
3. QIcon的png如何如何绑定?
解决方法:一定要添加到资源文件路径。否则setWindowIcon(QIcon(":./images/title.png"));
无法访问到图片。
4. 如何使用新的方式自定义信号和槽?
解决方法:用对象和类的方法作为形参即可。比如connect(pActionA1, &QAction::triggered, this, &MainWindow::open);
5. 如何添加状态栏?
解决方法:参考官网example,原来状态栏就是mainwindows中的成员statusBar()。直接用即可statusBar()->showMessage(tr("File saved"), 2000);
初始化UI的时候设置statusBar()->showMessage(tr("Ready"));
,状态栏就会一直显示。
6. 如何绑定toolbar使其显示出来?
解决方法:和Menubar的显示类似,参考官网example。QToolBar *fileToolBar = addToolBar(tr("File"));
即可链接到mainwindow进行显示。一般toolbar和menubar一起设置的,因为关联的action是一样的。在工具栏中有图标的则显示图标,没有图标的则显示文字。
7. mainwindow如何通过代码添加控件?
解决方法:通过setCentralWidget来设置widget,但是有多个Widget就需要使用QHBoxLayout和QVBoxLayout完成布局,但是setCentralWidget的参数必须是Qwidget,所以创建一个Qwidget并添加最后的layout。
QWidget *centerWindow = new QWidget;
this->setCentralWidget(centerWindow);
centerWindow->setLayout(mainLayout);
8. QmessgeBox如何换行?
解决方法:添加关键字<br>
,比如QMessageBox::information(NULL,"关于",QString("作者:AppleCai<br>版本:V1.00"), QMessageBox::Ok);
9. QT如何捕获窗口关闭按钮的事件?
解决方法:重写void closeEvent(QCloseEvent *event);
函数,里面可以用QMessageBox的响应结果作为判断逻辑。
10.QT如何添加托盘功能?
解决方法:参考官网exampleD:\Qt\Examples\Qt-6.0.2\widgets\desktop\systray
。设置托盘menu并且绑定action。关于显示最小化托盘的思路是捕获到点击关闭的时候提示是否退出或缩小。缩小就是到启动托盘,并且隐藏窗体。
四,截图
做了一个文本编辑器。
五,小结
模仿是一种比较快速的学习方法,通过学习example来逐步了解QT6界面编程API还是比较高效的一种方法,另外QT的help很好,不但有方法提示,而且F1直接看具体内容。