因工作需要用到qt,打算边学边写,主要记录自己的思维理解及一些重要的知识点,文章会参考很多大佬的博客,都会注明。不打算写的很有逻辑和条理,如有朋友看到了请见谅我写的不足的地方,欢迎批准指正!系列均采用了qt5.14.2的版本,mingw的编译器。虽然最新的稳定版是5.15.2,实在懒得卸载重新安装了。另外该系列基本会一直参考豆子大佬的博客:《Qt 学习之路 2》目录 - DevBean Tech World。
qt5.15.2的下载安装可以参考这篇文章:Qt5.15下载和安装教程_QTkaifa的博客-CSDN博客_qt5.15
#include "mainwindow.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow myWindow; //myWindow.setWindowTitle("hello"); myWindow.show(); return a.exec(); }
解释一下:
前两行是 C++ 的 include 语句,这里我们引入的是QApplication
以及mainwindow
这两个类。main()
函数中第一句是创建一个QApplication
类的实例。对于 Qt 程序来说,main()
函数一般以创建 application 对象(GUI 程序是QApplication
,非 GUI 程序是QCoreApplication
。QApplication
实际上是QCoreApplication
的子类。)开始,后面才是实际业务的代码。这个对象(application对象)用于管理 Qt 程序的生命周期,开启事件循环,这一切都是必不可少的。在我们创建了QApplication
对象之后,直接创建一个MainWindow
对象,最后调用MainWindow
的show()
函数将其显示出来。main()
函数最后,调用app.exec()
,开启事件循环。我们现在可以简单地将事件循环理解成一段无限循环。正因为如此,我们在栈上构建了MainWindow
对象,却能够一直显示在那里(试想,如果不是无限循环,main()
函数立刻会退出,MainWindow
对象当然也就直接析构了)。
注意:此时直接运行时,如果你没有设置title,窗口的title默认显示的是你的工程名。这个具体的解释我在帮助文档里找到了:
//来自于Qwidget Class windowTitle : QString This property holds the window title (caption) This property only makes sense for top-level widgets, such as windows and dialogs. If no caption has been set, the title is based of the windowFilePath. If neither of these is set, then the title is an empty string. If you use the windowModified mechanism, the window title must contain a "[*]" placeholder, which indicates where the '*' should appear. Normally, it should appear right after the file name (e.g., "document1.txt[*] - Text Editor"). If the windowModified property is false (the default), the placeholder is simply removed. On some desktop platforms (including Windows and Unix), the application name (from QGuiApplication::applicationDisplayName) is added at the end of the window title, if set. This is done by the QPA plugin, so it is shown to the user, but isn't part of the windowTitle string. Access functions: QString windowTitle() const void setWindowTitle(const QString &)
二.QMainWindow的继承关系
GUI应用程序都有一个主窗口,虽然前面讲到的QWidget组件也可以定义生成主窗口,但是Qt还定义了一个专门用于实现主窗口的类QMainWindow。为什么?跟QDialog一样的道理,主窗口具有许多主窗口特有的元素组件,为了程序的复用性,Qt在QWidget的基础上“特例化”了一个QMainWindow。
GUI程序是由一个主窗口和多个对话框组成,主窗口是与用户进行长时间交互的窗口,是程序启动后显示的第一个窗口,程序的绝大多数功能是直接由主窗口提供,辅助功能由对话框提供。 原文链接:Qt中的主窗口QMainWindow_echo_bright_的博客-CSDN博客
QMainWindow是Qt中主窗口的基类:
显然,QMainWindow是一种容器类型的组件。
QMainWindow封装了主窗口常用的菜单栏组件、工具栏组件、中心组件组件、停靠栏组件和状态栏组件。对于程序员来讲对这些概念再熟悉不过了。Qt是面向对象的GUI开发平台,所以上述封装在MainWindow中的组件自然也是以类的形式存在:
1. 菜单栏组件QMenuBar 1.1 下拉菜单项组QMenu 1.2 菜单项QAction 2. 工具栏组件QToolBar 2.1 快捷项QAction 3. 状态栏组件QStatusBar 3.1 任意组件QWidget
出自:Qt中的主窗口QMainWindow_echo_bright_的博客-CSDN博客