前言
本文主要介绍Qt的文件结构和组成,以及各个文件的作用。
一、QT的文件结构
Qt的文件结构见于软件的左侧,其中 .pro文件是项目的工程工程文件,主要存放着一些项目信息;.h文件是C++程序的头文件,.cpp文件是项目的程序文件,.ui文件是使用Qt设计师设计的界面文件。
二、使用步骤
文件和.cpp文件与普通C++程序中的文件作用相同,主要介绍设计的MOC编译器,其它主要介绍.pro文件和.ui文件。
1. .pro文件
pro文件是整个项目的管理文件。Qt使用qmake工具,根据pro文件,生成makefile进而编译整个项目,所以pro文件至关重要,在不知道功能的前提下尽量不要进行修改。 pro文件以#作为注释。
QT += core gui
CONFIG += c++11
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += \
main.cpp \
widget.cpp
HEADERS += \
widget.h
FORMS += \
widget.ui
RESOURCES += \
src/img/img.qrc \
src/img/res.qrc
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
2. .ui文件介绍
ui文件是Qt根据用户的布置而生成的xml格式的文件,里面描述了部件如何进行布置,编译之后会将其生成C++格式的文件,这个文件用户在程序中不可见,但是可以对其进行调用。调用的方式有多种,后面会讲。
<?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>800</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle">
<string>Widget</string>
</property>
<widget class="QPushButton" name="pushButton">
<property name="geometry">
<rect>
<x>50</x>
<y>100</y>
<width>89</width>
<height>25</height>
</rect>
</property>
<property name="text">
<string>PushButton</string>
</property>
</widget>
<widget class="QToolButton" name="toolButton">
<property name="geometry">
<rect>
<x>190</x>
<y>110</y>
<width>26</width>
<height>24</height>
</rect>
</property>
<property name="text">
<string>...</string>
</property>
</widget>
<widget class="QCheckBox" name="checkBox">
<property name="geometry">
<rect>
<x>70</x>
<y>190</y>
<width>92</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string>CheckBox</string>
</property>
</widget>
</widget>
<resources/>
<connections/>
</ui>
另外在某些情况下,需要对Ui文件进行一些修改,在可视化的界面是无法进行修改的,而在XML格式的文件中进行修改非常简单,需要可以适当对XML文件进行下阅读,了解其基本格式。
3. .h和.cpp文件
在QT中实际见到的.h和.cpp文件,并不是最后编译用的.h和.cpp文件。这是用因为Qt使用了MOC(元对象编译器),MOC会为每个包含Q_OBJECT宏的文件提前进行一次编译,生成一个以moc_+原文件名 为名的源文件。这些文件在编译文件夹中可以找到。
这也是为什么,如果需要使用信号和槽机制的源文件需要添加Q_OBJECT宏的原因。另外后期知道,信号是只需要声明,而不需要实现的,而实际上,元对象编译器为我们提供了实现内容。
总结
本章节主要介绍了QT工程的文件组成。
|