1、下载和安装
Qt [1] 是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,Qt很容易扩展,并且允许真正地组件编程。2008年,Qt Company科技被诺基亚公司收购,Qt也因此成为诺基亚旗下的编程语言工具。2012年,Qt被Digia收购。2014年4月,跨平台集成开发环境Qt Creator 3.1.0正式发布,实现了对于iOS的完全支持,新增WinRT、Beautifier等插件,废弃了无Python接口的GDB调试支持,集成了基于Clang的C/C++代码模块,并对Android支持做出了调整,至此实现了全面支持iOS、Android、WP,它提供给应用程序开发者建立艺术级的图形用户界面所需的所有功能。基本上,Qt 同 X Window 上的 Motif,Openwin,GTK 等图形界面库和 Windows 平台上的 MFC,OWL,VCL,ATL 是同类型的东西。
介绍链接:https://baike.baidu.com/item/qt/451743?fr=aladdin
下载链接:http://download.qt.io/archive/qt/5.14/5.14.2/
需要注册的邮箱账号和密码:
勾选所要安装的组件:
同意则继续:
开始安装:
等待一会就会安装成功!!!
开始运行的界面:
点击NEW按钮,则新建项目:
里面有Qt的程序项目,包括Qt Widgets、Qt Quick(QML)、Qt for python等的选项,
然后选择Qt Widgets:
点击下一步:
点击下一步,勾选“QWidget”,勾去“Generate form”,则不会生成ui编辑文件:
选择MinGW 64-bit:
点击下一步,会创建如下几个文件:
2、各个文件的解释
Application.pro:
1.配置项详细说明
- 注释:注释是从一行的
#
开始,到这一行的结束。 QT +=
:这个是添加QT项目需要的模块的,若项目中要排除某个模块,也可用QT -=
配置项。TEMPLATE =
: 这个配置项确定qmake
为这个应用程序生成哪种makefile
。有下面五种形式可供选择:
app:
建立一个应用程序的makefile,这个是默认值,若模块项未指定,将默认使用此项;
lib:
建立一个库的makefile;
vcapp:
建立一个应用程序的VisualStudio项目文件;
vclib:
建立一个库的VisualStudio项目文件;
subdirs:
这是一个特殊的模板,可以创建一个可进入特定目录并为一个项目文件生成makefile,此makfile可以调用make;
4. TARGET = :
这个配置项用来指定最后生成的目标应用程序的名称。
5. CONFIG += :
用来告诉qmake关于应用程序的配置信息,使用+=
表示在现有的配置上添加,这样会更安全。比如,CONFIG += qt warn_on release
其具体的意义为:
qt :
告诉qmake此程序是使用qt来连编的。即qmake在连接、为编译添加所需包含路径时会考虑qt的库;
warn_on :
告诉qmake要将编译器设置为输出警告信息形式;
release :
告诉qmake应用程序必须被连编为一个可发布的应用程序。开发过程中,也可以使用debug
;
6. UIC_DIR += :
用来指定uic
命令,将.ui
文件转化为ui_*.h
文件存放的目录。
7. RCC_DIR += :
用来指定rcc
命令,将.qrc
文件转换成qrc_*.h
文件存放的目录。
8. MOC_DIR += :
用来指定moc
命令,将含有Q_OBJECT
的头文件转换成标准.h
文件存放的目录。
9. OBJECTS_DIR += :
用来指定目标文件obj
的存放目录。
10. DEPENDPATH += :
用来指定工程的依赖路径。
11. INCLUDEPATH += :
用来指定工程所需要的头文件。
12. CODECFORSRC += :
用来指定源文件的编码格式。
13. FORMS += :
用来指定工程中的ui
文件。
14. HEADERS += :
用来指定工程中所包含的头文件。
15. SOURCES += :
用来指定工程中包含的源文件。
16. RESOURCES += :
用来指定工程中所包含的资源文件。
17. LIBS += :
用来指定引入的lib
文件的路径,一般会在前面加下参数-L
,根据不同的版本可以分为两种形式:
Release: LIBS += -L folder Path
//release版本引入的lib
文件
Debug: LIBS += -L folder Path
//debug版本引入的lib
文件
18. DEFINES += :
用来定义编译选项。
19. DESTDIR += :
用来指定目标的生成路径。
widget.h:
Widget类进行public继承QWidget,
Widget(QWidget *parent = nullptr);
这句话表示Widget的构造函数默认传的是NULL。
widget.cpp:
C++的构造传参,将parent参数传给QWidget。
QWidget继承QObject and QPaintDevice,它的子类有很多,都是组件。
3、信号与槽
一.信号
当对象的内部状态发生改变,信号就被发射。只有定义了一个信号的类和它的子类才能发射这个信号。
信号的声明是在头文件中进行的,QT的signals关键字指出进入了信号声明区,随后即可声明自己的信号。信号由moc自动生成,所以不需要在cpp中定义,只需要声明。
二.槽
槽是普通的 C++ 成员函数,可以被正常调用,它们唯一的特殊性就是很多信号可以与其相关联。当与其关联的信号被发射时,这个槽就会被调用。槽可以有参数,但槽的参数不能有缺省值。
槽函数分为三种类型,即 public slots、private slots 和 protected slots。
public slots:在这个区内声明的槽意味着任何对象都可将信号与之相连接。
protected slots:在这个区内声明的槽意味着当前类及其子类可以将信号与之相连接。
private slots:在这个区内声明的槽意味着只有类自己可以将信号与之相连接。
三.信号与槽的使用
通过调用connect 函数来将某个对象的信号与另外一个对象的槽函数相关联,这样当发射者发射信号时,接收者的槽函数将被调用。
1)一个信号可以连接到多个槽。
2)一个槽可以被多个信号连接。
3)信号也可以连接到信号,此时前者的发射信号将导致后者的发射。
4)信号的参数类型可以与槽的参数类型对应,信号的参数可以比槽的参数多,但不可以少,否则连接将失败。
备注:
信号只声明,不实现;槽函数可以使用匿名函数进行编写,也可以内置一个类的成员函数,传递的都是函数指针。
QPushButton的信号与槽: