Qt [1] 是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,Qt很容易扩展,并且允许真正地组件编程。
可配置且可重新发布的文档阅读器,可以方便地进行定制,并与Qt应用程序一起重新发布。
功能:
定制Qt Assistant并与应用程序一起重新发布
快速查找关键词,全文本搜索,生成索引和书签
同时为多个帮助文档或在应用程序中提供在线帮助
强大的跨平台GUI布局和格式构建器
功能:
使用拖放功能快速设计用户界面
定制部件或从标准部件库中选择部件
以本地外观快速预览格式
通过界面原型生成C++或Java代码
将QT Designer与Visual Studio或Eclipse IDE配合使用
使用Qt信号与槽机制构建功能齐全的用户界面
提供一套加速应用程序翻译和国际化的工具
功能:
收集所有UI文本,并通过简单的应用程序提供给翻译人员
语言和字体感知外观
通过智能的合并工具快速为现有应用程序增加新的语言
Unicode编码支持世界上大多数字母
运行时可切换从左向右或从右向左的语言
在一个文档中混合多种语言
文件说明
项目建立完成之后会直接进入编辑模式
生成文件说明:
文件 | 说明 |
---|---|
文件.pro | 项目文件,包含项目相关信息 |
文件.pro.user | 包含与用户有关的项目信息 |
文件.h | 新建的类的头文件 |
文件.cpp | 新建的类的源文件 |
main.cpp | 包含了main()主函数 |
文件.ui | 设计师设计的界面对应的界面文件 |
双击文件.ui可以进入ui界面,进入设计模式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FXXTlxdy-1656561094723)(file:///C:\QQ\1045434877\Image\C2C\4ZY@}ER~GU2@7`O{ADQ%HW6.png)]
用来设计界面以及编辑各个部件的属性
窗口分类罗列各种常用的标准部件,可以使用鼠标拖入主设计区,放到主设计区的界面
列出界面上所有的对象名称和父类,而且以树形结构显示了各个部件的所属关系,可以在这里单击对象选中该部件
显示各个部件的常用属性信息,可以更改部件的一些属性。这些属性按照从祖先继承的属性、从父类继承的属性和自己属性的顺序进行了分类
两个编辑器可以对相应的对象内容进行编辑。
最上面前4个图标可以进入相应的模式,窗口部件编辑模式 信号/槽编辑模式 伙伴编辑模式 Tab顺序编辑模式 后面几个图标实现添加布局管理器以及调整大小等功能
使用快捷键Crtl+R或者通过左下角运行按钮来运行程序
当在Qt creator运行程序之后,会在目录生成一个Debug文件夹。是默认的构建目录。Qt creator将项目源文件和编译生成的文件进行了分类存放。
双击运行Debug文件夹下的可执行文件,可能会出现系统错误
内容:无法启动此程序,计算机中丢失…,尝试重新安装该程序以解决此问题。
解决办法:添加环境变量,找到系统属性→环境变量→Path→新建→丢失文件的路径→确定
之后就可以运行可执行文件
程序编译完成之后,要发布程序,让程序在别人的计算机业同样可以运行,发布程序要使用release版本。
设置release格式:点击左下角的目标选择器将构建目标设置为release 单机运行图标,生成一个release文件夹
打包:将release文件夹中的.exe文件复制到一个打包文件夹里面,将Qt安装目录的bin目录中的libgcc_s_dw2-1.dll、libstdc+±6.dll、libwinpthread-1.dll、Qt5Core.dll、Qt5Gui.dll、Qt5Widgets.dll
在Qt Creator默认的情况下,编译的程序想要发布就需要包含dll文件的支持,这种编译方式称为动态编译
静态编译就是将Qt的库进行重新编译,用静态编译的Qt库来链接程序,这样生成的目标文件就可以直接运行,而不再需要dll文件的支持。不过生成的exe文件会很大,静态编译缺乏灵活性,也不能部署插件。
RC_ICONS = 图标名称.ico
3.运行程序,在release文件夹中的exe文件查看是否更换图标,将这里换好图标的exe文件复制到程序发布文件夹中,就可以得到一个完整的程序
此模块通过不同的项目写方法来输出一个"HELLO WORLD! 你好Qt!"的对话框
测试过程:
第一步,新建空项目,打开Qt creator并新建项目,选择其他项目中的Empty qmake Project,将项目命名之后并设置路径。完成后,双击 .pro文件,添加一行代码
greaterThan(QT_MAJOR_VERSION,4):QT += widgets #如果Qt主版本大于4,则需要添加widgets模块
第二步,在项目中添加main.cpp文件,在项目文件列表中的项目文件夹上右击,选择"Add new" 然后选择C++ Source File,名称设置为main.cpp,后面保持默认即可。
第三步,编写源代码,向新建的main.cpp文件中添加如下代码:
#include
#include
#include #前三行是头文件包含,Qt中每一个类都有一个与其同名的头文件
int main(int argc,char *argv[]) #C++中常见的main()函数 有两个参数,接收命令行参数
{
QApplication a(argc,argv); #新建一个QApplication类对象,用于管理应用程序的资源,任何一个Qt Widgets程序都要有一个QApplication对象,因为Qt程序可以接收命令行参数,所以需要argc和argv两个参数。
QDialog w; #新建一个QDialog对象,QDialog类用来实现一个对话框界面
QLabel label(&w); #新建一个QLabel对象,并将QDialog对象作为参数,表明了对话框是它的父窗口,也就是说这个标签放在对话框窗口中。
label.setText("HELLO WORLD! 你好Qt!"); #给标签设置要显示的字符。
w.show(); #让对话框显示出来。
return a.exec();
}
第四步,编译运行。显示窗口小,更改代码
#include
#include
#include
int main(int argc,char *argv[])
{
QApplication a(argc,argv);
QDialog w;
w.resize(400,300); #修改对话框大小
QLabel label(&w);
label.move(120,120); #修改标签在对话框的位置
label.setText(QObject::tr("HELLO WORLD! 你好Qt!")); #QObject::tr()函数可以实现多语言支持,建议程序中所有要显示到界面上的字符串都使用tr()函数括起来。
w.show();
return a.exec();
}
一、代码自动补全功能 打完开头几个字母出现相关的列表选项,可以直接查找。此外 比如想要打出setWindowTitle,可以直接输入swt三个字母来快速定位,然后Enter就可以完成输入
二、快速查看帮助,将鼠标指针放到一个类名或函数上,出现一个提示框显示简单介绍。按下F1可以在编辑器右边快速打开帮助文档。可以单机左上角的“切换到帮助模式”进入帮助模式。
命令行编译程序指不使用Qt creator,而是在其他的编辑器中编写源码,然后再到命令行去编译该程序。
测试过程:
第一步,新建工程目录。在Qt的安装目录创建一个文件夹(命名为工程名字)
第二步,在工程文件夹里面创建一个文本,将上面做的main.cpp的内容复制到文本里面,并将文本改为main.cpp
第三步,打开开始菜单找到Qt的命令提示符程序,从这里打开将Qt环境已经搭建好了,之后进入工程文件夹 (cd 绝对路径)
第四步,进入文件夹之后 输入 qmake -project 输入之后会在工程文件夹内生成一个工程文件夹名字.pro
第五步,通过文本程序打开.pro文件,在最后一行输入greaterThan(QT_MAJOR_VERSION,4):QT += widgets
第六步,在命令提示符程序输入qmake ,之后会在文件夹生成release等文件夹,此时文件夹都是空的
第七步,在命令提示符程序输入mingw32-make命令来编译程序,编译完成后会在release目录中出现exe文件/
第八步,进入release文件夹(cd release),运行.exe文件,就会运行程序
这就是Qt程序编辑、编译和运行的整个过程。
测试过程:
第一步,添加.ui文件,在项目中左上角文件→新建文件或项目→文件和类→QT→Qt Designer Form→Dialog without Buttons→更改文件名称
第二步,设计界面,生成好文件便进入设计模式,在界面右边添加一个Label部件,拖入到中间对话框,并更改Label内容为”HELLO WORLD! 你好Qt!“,右边属性栏的geometry属性更改坐标位置。更改类对象,在右上角的类列表中选择QDialog类对象,之后在下面可以对其更改类对象名称
第三步,生成ui头文件,按下Crtl+S快捷键先保存更改,按下Crtl+2快捷键回到编辑模式,之后使用右下角锤子图标或者Crtl+Shift+B快捷键构建工程,然后本地项目文件夹会生成一个由ui文件生成的.h头文件
/********************************************************************************
** Form generated from reading UI file 'hellodialog.ui'
**
** Created by: Qt User Interface Compiler version 5.12.3
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/ #注释信息
#ifndef UI_HELLODIALOG_H #预处理指令 防止对这个头文件的多重包含
#define UI_HELLODIALOG_H #预处理指令 防止对这个头文件的多重包含
#include #类的头文件
#include #类的头文件
#include #类的头文件
#include #类的头文件
QT_BEGIN_NAMESPACE #Qt的命名空间的开始宏
class Ui_HelloDialog 定义了一个UI_HelloDialog类,类名就是前面更改的对话框类对象的名称前添加了"UI_"字符,这是默认的名字。
{
public:
QLabel *label; #定义了一个QLabel类对象的指针,这个就是在对话框添加的Label部件
void setupUi(QDialog *HelloDialog) #setupUi()函数用来生成界面。
{
if (HelloDialog->objectName().isEmpty()) #设置了对话框的对象名称
HelloDialog->setObjectName(QString::fromUtf8("HelloDialog")); #设置了对话框的对象名称
HelloDialog->resize(503, 346); #设置了窗口大小
label = new QLabel(HelloDialog); #创建了标签对象
label->setObjectName(QString::fromUtf8("label")); #设置了标签对象名称
label->setGeometry(QRect(150, 70, 191, 131)); #设置了标签大小和位置
retranslateUi(HelloDialog); #调用了retranslateUi()函数,这个函数下面5行进行了定义,实现了对窗口里的字符串进行编码转换的功能
QMetaObject::connectSlotsByName(HelloDialog); #调用了 QMetaObject类的connectSlotsByName()静态函数,使得窗口中的部件可以实现按对象名进行信号和槽的关联
} // setupUi
void retranslateUi(QDialog *HelloDialog)
{
HelloDialog->setWindowTitle(QApplication::translate("HelloDialog", "Dialog", nullptr));
label->setText(QApplication::translate("HelloDialog", "Hello World!\344\275\240\345\245\275QT!", nullptr));
} // retranslateUi
};
namespace Ui { #定义了命名空间Ui,其中定义了一个HelloDialog类,继承自Ui_HelloDialog类
class HelloDialog: public Ui_HelloDialog {};
} // namespace Ui
QT_END_NAMESPACE #Qt的命名空间的结束宏
#endif // UI_HELLODIALOG_H
第四步,更改main.cpp文件
#include "ui_hellodialog.h" #头文件包含,ui_hellodialog.h中已经包含其他类的定义,只需要包含这个文件就可以 使用"<>"系统会到默认目录(编译器及环境变量、项目文件所定义的头文件寻找目录,包括Qt安装的include目录,这是标准方式,用双引号时,系统先到用户当前目录中查找要包含的文件,找不到在按标准方式查找。
int main(int argc,char *argv[])
{
QApplication a(argc,argv);
QDialog w;
Ui::HelloDialog ui; #使用命名空间Ui中的HelloDialog类定义了一个ui对象
ui.setupUi(&w); #使用setupUi()函数,并将对话框类对象作为参数,可以将设计好的界面应用到对象w所表示的对话框上
w.show();
return a.exec();
}
第五步,运行程序,可以看到和用纯代码编写和命令行编译相同的对话框窗口
测试过程:
第一步,新建工程目录,在C:/Qt目录中创建文件夹,然后将在使用.ui界面文件的hellodialog.ui和main.cpp复制过来
第二步,编译.ui文件,打开Qt的命令提示符程序,进入cd C:\Qt\刚才建立的文件夹名字
uic -o ui_hellodialog.h hellodialog.ui #生成.h文件
第三步,输入 qmake -project 输入之后会在工程文件夹内生成一个工程文件夹名字.pro,通过文本程序打开.pro文件,在最后一行输入greaterThan(QT_MAJOR_VERSION,4):QT += widgets
第四步,在命令提示符程序输入qmake ,之后会在文件夹生成release等文件夹,此时文件夹都是空的
qmake
第五步,在命令提示符程序输入mingw32-make命令来编译程序,编译完成后会在release目录中出现exe文件/
mingw32-make
第六步,进入release文件夹(cd release),运行.exe文件,就会运行程序
cd release