赞
踩
本文为对QT的项目结构进行简要的介绍。
创建项目途中,代码的路径如果是中文会有报错,如何创建参考上一篇文章
重新创建一个路径不带中文名称的路径,然后就可以正常运行项目了
#include "widget.h"main.cpp
#include <QApplication>
int main(int argc, char *argv[]) #命令行参数,命令行参数内容
{
QApplication a(argc, argv); #创建对象,传递参数,图形化界面必须要有
Widget w; # widget就是创建项目填写的生成类名
w.show();# 让空间对象显示 。hide隐藏
# widget的父类Qwidget提供的
return a.exec();
#
}
linux中的exec,进程程序替换,把可执行文件中的代码和数据替换到当前进程中,
QT的exec和linux的没有任何关系,只是名字恰好是一样的,一个术语在不同的场合表示的含义不一样,结合上下文进行理解
文件中的widget的声明
#ifndef WIDGET_H #define WIDGET_H #保证头文件包含一次 更推荐 # pragma once #include <QWidget># QT的设定,使用QT内置的类,包含头文件名字和类名一致 QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACE class Widget : public QWidget # 继承QWidget,也就是创建项目时选择的父类,内置,需要包含头文件 { Q_OBJECT # QT内置的宏,本质上是文本替换,会生成一大堆代码,信号槽机制需要引用 public: Widget(QWidget *parent = nullptr); #构造函数 ~Widget(); # 析构函数 //parent引入对象树机制,创建的Qt对象,就可以把这个对象挂到对象树上,往树上挂的过程中要指定父节点(N叉树) private: Ui::Widget *ui; }; #endif // WIDGET_H
也不是用到的所有类都要显式包含头文件,也可能是间接包含的,比如引用a.h,其中又包含了b.h,因此如果需要一个QT类先用,看是否已经被隐式包含了
#include "widget.h" # 头文件
#include "ui_widget.h" #form file被 qmake生成的头文件
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget) //
{
ui->setupUi(this);#以上两个为把form file生成的界面和当前的widget关联起来
}
Widget::~Widget()
{
delete ui;
}
关键点:form file
双击UI文件,会自动调用UIdesinger,会有图形化界面的编辑器
这就是我们生成的程序窗口,
左侧:QT中内置的控件,拖拽左侧的控件到程序窗口就可以创建具体的界面了,
右侧:右面编辑属性,每个控件有很多属性,就影响到控件的具体行为
再点击左侧编辑会显示本来的代码文件,为xml格式,和html十分类似,都使用成对的标签来表示数据,还有一些单标签。
标签的含义是程序员自定义的,本文件中的是QT开发的,不用关注具体的含义,而html是固定的,有标准委员会。
QT中使用xml文件是为了描述程序的界面什么样子的,qmake会调用相关的工具依据xml文件生成C++代码,从而把完整的界面构建出来。
QT项目的工程文件,也是qmake构建的重要依据
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 # 描述当前项目中,参与构建的文件都有什么(编译器要编译哪些文件) 不需要手动修改,QT。creater会自动维护, # Default rules for deployment. qnx: target.path = /tmp/$${TARGET}/bin else: unix:!android: target.path = /opt/$${TARGET}/bin !isEmpty(target.path): INSTALLS += target
相当于linux中的 Make file(很古老的技术),qmake+ .pro
和Makefile是类似的,creater已经把细节封装好了,可以直接编译运行
以上都是源文件,这时候我们看一下构建过程中生成的中间文件,位于和本文件夹并列的目录。
1.这个makefile不需要手动写,自动生成
2.ui.widget.h自动生成,根据xml内容构建的界面内容。
生成的文件中Ui_Widget,在我们的widget.h的类的声明中有提到,该文件中的代码会在SetupUi这个方法中生成出界面的具体细节
debug中的EXe就是最终生成的可执行文件,和再creater中是一个效果。
了解QT项目的组成部分
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。