QT学习笔记

QT介绍

Qt [1] 是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,Qt很容易扩展,并且允许真正地组件编程。

Qt Assistant(Qt 助手)

可配置且可重新发布的文档阅读器,可以方便地进行定制,并与Qt应用程序一起重新发布。

功能:

定制Qt Assistant并与应用程序一起重新发布

快速查找关键词,全文本搜索,生成索引和书签

同时为多个帮助文档或在应用程序中提供在线帮助

Qt Designer(Qt 设计师)

强大的跨平台GUI布局和格式构建器

功能:

使用拖放功能快速设计用户界面

定制部件或从标准部件库中选择部件

以本地外观快速预览格式

通过界面原型生成C++或Java代码

将QT Designer与Visual Studio或Eclipse IDE配合使用

使用Qt信号与槽机制构建功能齐全的用户界面

Qt Linguist(Qt 语言家)

提供一套加速应用程序翻译和国际化的工具

功能:

收集所有UI文本,并通过简单的应用程序提供给翻译人员

语言和字体感知外观

通过智能的合并工具快速为现有应用程序增加新的语言

Unicode编码支持世界上大多数字母

运行时可切换从左向右或从右向左的语言

在一个文档中混合多种语言

Qt creator创建项目

  1. 选择项目模板,文件→新建文件或项目(crtl+N) :Application →Qt Widgets Application→choose
  2. 输入项目信息, 项目介绍和位置 :设置项目名称 浏览:设置项目路径(项目名称和路径不能出现中文)
  3. 选择构建套件 (Kits) 设置 然后下一步
  4. 输入类信息,类信息定义类 设置好之后进行下一步
  5. 设置项目管理 设置之后点击完成

文件说明

项目建立完成之后会直接进入编辑模式

生成文件说明:

文件说明
文件.pro项目文件,包含项目相关信息
文件.pro.user包含与用户有关的项目信息
文件.h新建的类的头文件
文件.cpp新建的类的源文件
main.cpp包含了main()主函数
文件.ui设计师设计的界面对应的界面文件

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文件会很大,静态编译缺乏灵活性,也不能部署插件。

设置应用程序图标
  1. 创建.ico文件。将ico图标文件复制到工程文件夹中。 ico文件可以通过网上在线转换 将png等文件转换为ico
  2. 修改项目文件,在Qt creator中的编辑模式将文件.pro最后面添加一行代码
RC_ICONS = 图标名称.ico

3.运行程序,在release文件夹中的exe文件查看是否更换图标,将这里换好图标的exe文件复制到程序发布文件夹中,就可以得到一个完整的程序

helloworld程序源码与编译过程详解

此模块通过不同的项目写方法来输出一个"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 <QApplication>  
#include <QDialog>
#include <QLabel>  #前三行是头文件包含,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 <QApplication>
#include <QDialog>
#include <QLabel>

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文件

使用.ui界面文件

测试过程:

第一步,添加.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 <QtCore/QVariant>      #类的头文件
#include <QtWidgets/QApplication>   #类的头文件
#include <QtWidgets/QDialog>   #类的头文件
#include <QtWidgets/QLabel>    #类的头文件

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();
}

第五步,运行程序,可以看到和用纯代码编写和命令行编译相同的对话框窗口

在命令行编译ui文件和程序

测试过程:

第一步,新建工程目录,在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
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值