赞
踩
目录
主函数
- #include "widget.h"
-
- #include <QApplication>
-
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- Widget w;
- w.show();
- return a.exec();
- }
上面就是 Qt 刚创建的一个 Widget 类中的默认主函数,那么这个默认的主函数是什么意思呢?
在 main 函数中的两个参数一般是命令行上用的参数,用来将命令行中输入的数据,以参数的方式传到这个程序中。
QApplication 这个对象是一个 Qt 程序必须有的。
Widget 就是我们选择创建的文件的类名,这个类继承自 Qt 中的 QWidget 的一个类,而在 Qt 中继承是特别常见的。
w.show() 就是让这个控件中的内容显示出来。
a.exec() 就是执行起来这个程序。
- #ifndef WIDGET_H
- #define WIDGET_H
-
- #include <QWidget>
-
- QT_BEGIN_NAMESPACE
- namespace Ui { class Widget; }
- QT_END_NAMESPACE
-
- class Widget : public QWidget
- {
- Q_OBJECT
-
- public:
- Widget(QWidget *parent = nullptr);
- ~Widget();
-
- private:
- Ui::Widget *ui;
- };
- #endif // WIDGET_H

这个 widget 就是我们自己选择创建的类,上面这个就是默认代码中 widget 中的声明
最上面的两个宏定义(条件编译)的意思就是防止头文件重复包含,和 #pragma once 是一个意思
namespace Ui { class Widget; } 这个就是Qt 中的 ui 文件相关的
public QWidget 是 Widget 继承的父类,我们前面也说了 Qt 是特别喜欢使用继承多态的
Q_OBJECT 是一个宏,展开后就是一堆代码的替换,如果没有这个代码,那么就没法使用Qt中的信号槽机制
构造函数中的参数是用来将这个对象挂到对象树上的,因为Qt是一个半自动化的内存释放,只要将创建的对象挂到对象树上,那么Qt就会帮你释放
最下面的成员变量的ui是和 form file 相关的
- #include "widget.h"
- #include "ui_widget.h"
-
- Widget::Widget(QWidget *parent)
- : QWidget(parent)
- , ui(new Ui::Widget)
- {
- ui->setupUi(this);
- }
-
- Widget::~Widget()
- {
- delete ui;
- }
-
在Widget构造函数中初始化列表中,使用parent 初始化基类
还有一个就是我们刚才说的 ui ,然后初始化
在构造函数中调用的 ui->setupUi 就是用来将 Widget 和 form file 绑定的
上面我们一直在说 form file ,那么form file 是什么呢? form file 实际上就是 ui 文件,我们可以看一下Qt 中的ui文件是什么样子的?
这里我们双击这个 ui 文件即可,然后我们就会进入到 qt disigner 中
这个就是可以使用拖拽来设计的ui文件,左边的那些都是一些常用的控件,我们可以使用这些控件来实现我们想要的功能。
然后我们可以再次点击左边的编辑按钮,此时我们就可以看到ui文件的本来面目。
就是这个样子,这就是 ui 文件的本来的面目,这个文件最后就会由 qt designer 将这个文件里面的内容,转化为 C++ 代码。
在Qt Creater 中还有一个很重要的文件,就是 .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 \
- widget.cpp
-
- HEADERS += \
- widget.h
-
- FORMS += \
- widget.ui
-
- # Default rules for deployment.
- qnx: target.path = /tmp/$${TARGET}/bin
- else: unix:!android: target.path = /opt/$${TARGET}/bin
- !isEmpty(target.path): INSTALLS += target

这个文件里面主要就是关于 Qt 构建的时候需要使用到的。
QT += core gui 因为 Qt 中是有很多模块的,但是因为很多时候用不到一些其他的模块,所以这个就是使用那个模块,就需要将对应的模块写到这个后面
CONFIG += c++11 这个就是当 Qt 编译的时候,按照什么标准来编译的,这里是使用 C++11来编译的
SOURCES HEADERS FORMS 这几个就是Qt用来管理那些文件是需要编译的,但是这里是不需要我们自己维护的,而是 Qt 会自动帮我们维护
这个 .pro 文件就像我们平时在 Linux 下写代码编译的时候使用到的 makefile 而这个文件加上 qmake 就和我们使用的 makefike 是一样的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。