main.cpp是实现main()函数的文件
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
main()
函数是应用程序的入口,主要的作用是创建应用程序,创建窗口,显示窗口并运行程序,开始应用程序的消息循环和事件处理。
QApplication
是Qt的标准应用程序类,a
就是应用程序对象。
MainWindow 是实例设计的窗口的类名,定义此窗口后再用w.show()显示窗口。
a.exec()
启动应用程序的执行,开始应用程序的消息循环和事件处理。
窗体相关的文件
编译后的项目会在目录中自动生成一个ui_MainWindow.h,这样一个窗体就关联4个文件:
Widget.h:定义窗体类的头文件
Widget.cpp:Widget类的功能实现源程序文件
Widget.ui:窗体界面文件,由UI设计器自动生成,存储了窗体上各个组件的属性设置和布局
ui_Widget.h:编译后根据窗体上的组件及其属性、信号与槽的关联等自动生成的一个类定义文件
窗体的相关文件
1:widget.h文件
这是一个窗体类的头文件,在创建时选择窗体基类QWidget,在widget.h中定义一个继承自QWidget的类Widget:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
QT_BEGIN_NAMESPACE
namespace Ui {
class Widget; }//一个UI命名空间,包含一个类Widget,这个类不是文本文件里定义的类Widget,而是ui_widget.h文件里定义的类,用于描述界面组件,这个声明相当于一个外部声明。
QT_END_NAMESPACE
class Widget : public QWidget//继承自QWidget
{
Q_OBJECT//使用宏,这是使用Qt的信号与槽机制的类必须加入的一个宏
public:
Widget(QWidget *parent = nullptr);//类的构造函数
~Widget();//类的析构函数
private:
Ui::Widget *ui;//这个指针是namespace Ui中的Widget类定义的,指向可视化设计的界面,访问界面上的组件都需要通过这个指针ui.
};
#endif // WIDGET_H
2.widget.cpp文件
类Widget的实现代码:
#include "widget.h"
#include "ui_widget.h"//Qt编译生成的与UI文件widget.ui对应的类定义文件
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);//执行Ui::Widget类的setupUi()函数,这个函数实现窗口的生成与各种属性的设置、信号与槽的关联.
}//构造函数,执行父类QWidget的构造函数,创建一个Ui::Widget类的对象ui.这个ui就是Widget的private部分定义的指针变量ui.
Widget::~Widget()
{
delete ui;
}
2.widget.ui文件
是窗体界面定义文件,是一个XML文件,定义了窗口上的所有组件的属性设置、布局以及信号与槽函数的关联等。用UI设计器可视化设计的界面由Qt自动解析,并以XML文件的形式保存下来,在设计界面时,只需在UI设计器里进行可视化设计即可,而不用管widget.ui文件是怎么生成的。
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Widget</class>
<widget class="QWidget" name="Widget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>351</width>
<height>241</height>
</rect>
</property>
<property name="windowTitle">
<string>Widget</string>
</property>
<widget class="QLabel" name="LabDemo">
<property name="geometry">
<rect>
<x>90</x>
<y>60</y>
<width>81</width>
<height>41</height>
</rect>
</property>
<property name="font">
<font>
<family>Agency FB</family>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Hello,World</string>
</property>
</widget>
<widget class="QPushButton" name="btnClose">
<property name="geometry">
<rect>
<x>220</x>
<y>150</y>
<width>80</width>
<height>41</height>
</rect>
</property>
<property name="font">
<font>
<family>Agency FB</family>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Close</string>
</property>
</widget>
</widget>
<resources/>
<connections>
<connection>
<sender>btnClose</sender>
<signal>clicked()</signal>
<receiver>Widget</receiver>
<slot>close()</slot>
<hints>
<hint type="sourcelabel">
<x>259</x>
<y>170</y>
</hint>
<hint type="destinationlabel">
<x>175</x>
<y>120</y>
</hint>
</hints>
</connection>
</connections>
</ui>