- 准备工作
- 下载链接
- 安装教程
- 界面介绍
- 模式选择器
- 菜单栏
- 创建程序的三种方式
- 手工编码
- 无UI的向导方式
- 有UI的向导方式
- 信号与槽
- 声明方式
- 具体限制
- 关联信号与槽
- 发送信号
- 控件的信号与槽
- 字符类 QChar
- 构造函数
- 方法
- 字符串类
- 构造函数
- 特殊内置方法
- 索引
- 比较大小
- 加法运算
- 格式化字符串和字符串格式化方法
- 数字型字符和数字之间相互转换
- 图片类 QImage
- 在Visual Studio C++中使用QT
官方下载网站
Qtcn开发网
Qt 5.14.1 安装详解 by 日月星辰TEL
界面介绍 模式选择器包含欢迎、编辑、设计、调试、项目、分析和帮助6个模式。
| 模式 | 功能 |
|---|---|
| 编辑 | 查看和编辑程序代码,管理项目文件。 |
| 设计 | 整合了Qt设计师功能。可以设计图形界面,进行部件属性设置、信号和槽设置、布局设置等操作。 |
| 调试 | 默认使用gdb进行调试,支持设置断点、单步调试和远程调试等功能。 |
| 项目 | 对项目构建设置、运行设置、编辑器设置和依赖关系等页面。其中编辑器设置中可以设置文件的默认编码。 |
| 选项 | 功能 |
|---|---|
| 文件 | 包含新建、打开、关闭项目和文件等基本功能 |
| 编辑 | 包含撤销、剪切、复制、查找等常用功能 |
| 构建 | 包含构建和运行项目等相关的功能菜单 |
| 调试 | 包含调试程序等相关的功能菜单 |
| 分析 | 包含QML分析器、Valgrind内存分析器等菜单。QML是一种脚本语言,可以描述一个窗体程序。而Valgrind用来检测运行时内存泄露、越界等问题 |
| 工具 | 提供了快速定位菜单、版本控制工具菜单和环境设置菜单等 |
| 控件 | 包含了设置窗口布局的一些菜单项,如全屏显示和隐藏边栏等 |
| 帮助 | 包含Qt帮助、插件管理等菜单项 |
这部分顺便解释下QT代码的结构。
手工编码利用菜单 文件->新建文件或项目 ,选择 其他项目->Empty qmake Project 建立一个工程。
下面这个界面中,下面的路径是项目文件存放的路径,QT会自动在这个路径下新建一个以上面的名称命名的文件夹。
这部分本人暂时不知道,等以后了解了再解释,总之按下图选。
上面在后面新建代码文件的时候,用来选择添加到哪个项目。
下面用来选择是否加入Git 。
左侧项目里会多出新建的 Test 文件夹和 Test.pro 项目文件。
再次打开新建对话框,选择“C++”项目下的“C++ Source File”,添加一个C++源程序。
Test 文件夹下新增 Sources 文件夹,包含 main.cpp 文件。且 Test.pro 内新增记录代码结构的代码。
需要成功运行,还必须在pro文件里加入一行 QT += widgets
在新建对话框中选择 Application 中的 Qt Widgets Application。
进入如下界面后选择基类
| 基类 | 功能 |
|---|---|
| QMainWindow | 提供一个有菜单栏、工具栏和一个状态栏的应用程序窗口 |
| QWidget | 是所有用户界面对象的基类。它从窗口系统接收鼠标、键盘和其它事件 |
| QDialog | 是对话框窗口的基类。主要用于短期任务以及和用户进行简要通讯的顶级窗口 |
以QDialog为例,工程建立完毕后,有四个文件:**.pro、dialog.h、dialog.cpp、main.cpp。
在上面选择基类的步骤中,勾选创建界面(Generate form)即可。
以QDialog为例,工程建立完毕后,会比上面多出一个 dialog.ui 的文件(XML格式)。
双击该文件,即可进入设计模式编辑界面。
信号即某个对象发送出的信息(是一个函数)
槽即某个对象用来接收信息的东西(是一个函数)
和下面所示的声明类似
class Sample: public QObject{
Q_OBJECT
public:
...
private:
...
protected:
...
}
信号需以如下方式声明:
class SampleA: public QObject{
Q_OBJECT
signals:
void stateChanged(int nNewVal);
}
槽需以如下方式声明:
class SampleB: public QObject{
Q_OBJECT
public slots:
void Function(int nNewVal){
...
}
private slots:
void Function(int nNewVal){
...
}
protected slots:
void Function(int nNewVal){
...
}
}
具体限制
信号函数满足以下约束
- 函数返回值是void类型
- 开发人员只能声明、不能实现信号函数
- 信号函数的参数个数、类型由开发人员设定,这些参数的职责是封装类的状态信息,并将这些信息传递给槽函数
- 只有QObject及其派生类才可声明信号函数
槽函数满足以下约束
- 槽函数和普通的C++成员函数一样,可以被正常调用
- 唯一的特殊性就是很多信号可以与其相关联,但对应信号函数的参数个数、类型要一致
- 与其关联的信号被发射时,这个槽就会被调用
- 槽函数可以是 public、protected、private
通过调用QObject::connect()函数可以绑定一个信号函数和一个槽函数,函数常用格式如下:
QObject::connect(sender, SIGNAL ( signal_func() ), receiver, SLOT( slot_func()));
其中sender及receiver 是指向对象的指针,前者指向发射对象,后者指向处理对象。
signal_func以及slot_func分别是这两个对象中定义的信号函数和槽函数。
发送信号需要使用 emit 关键字,例如:
emit stateChanged(m_Value);控件的信号与槽
GUI窗口控件(例如按钮、标签、列表、编辑框等等)都预先定义好了若干信号,比如单击按钮就会发出clicked信号,还有诸如双击(doubleClicked)、进入(entered)、按下(pressed)等等信号都是预先在控件内部定义好的。
同时控件中也有一些预先定义好的槽,比如close()、clear()等。
具体见C++ QT笔记_2(还在写)
| 构造函数 | 说明 |
|---|---|
| QChar(); | 构造一个空字符,即’ ’ |
| QChar(char ch); | 由字符数据ch构造 |
| QChar(uchar ch); | 由无符号字符ch构造 |
| QChar(ushort code); | code是Unicode编码 |
| QChar(short code); | code是Unicode编码 |
| QChar(uint code); | code是Unicode编码 |
| QChar(int code); | code是Unicode编码 |
| 方法 | 说明 |
|---|---|
| bool isDigit() ; | 判断是否是数字 |
| bool isLetter() ; | 判断是否是字母 |
| bool isNumber() ; | 是否是数字,包括正负号、小数点等 |
| bool isLetterOrNumber(); | 是否是字母或数字 |
| bool isLower() ; | 判断是否是小写字母 |
| bool isUpper(); | 判断是否是大写字母 |
| bool isNull(); | 判断是否是空字符’ ’ |
| 构造函数 | 说明 |
|---|---|
| QString str; | 空串 |
| QString str = “Hello”; | 初始化为Hello |
| QString str(‘A’); | 用一个字符初始化 |
| QString str(str2); | 用另一个字符串初始化 |
QString str = "abcd"; str[0] = 'x'; // 变为"xbcd" str[1] = str[0] ; // 变为"xxcd"比较大小
可以使用 >, <, >=, <=, == ,比如:
if(str == str2) { …… }
或者:
if(str > str2) { …… }
QString str = "Jiaotong "; str += "University" + "n"; // str变为 “Jiaotong Universityn”格式化字符串和字符串格式化方法
str.sprintf("%s %.1f%%", "perfect ratio: ", 96.3);
//该语句执行后str变为:perfect ratio: 96.3%
//另一种格式化字符串输出函数arg(),比如:
str = QString("%1 (%2s-%3s)").arg("society").arg(1950).arg(1970);
//这段代码中%1、%2、%3作为占位符
//输出为: society (1950s-1970s)
数字型字符和数字之间相互转换
//把数字转换成字符串 QString str = QString::number(54.3); //字符串转换成其他基本类型 QString str=”3.1415”; bool ok; //str被转换成数字,ok为true表示转换成功 double d = str.toDouble(&ok); // d 为 3.1415图片类 QImage
include在Visual Studio C++中使用QTint main(int argc, char *argv[]) { //传入图片路径创建图片 QImage image("G:/workspace2020/QT/4_2/nuist.jpeg"); //创建image对象 cout << image.width() << "n" << image.height() << endl; //返回宽和高 }
我看到的非常好地能解决问题的几篇文章
VS+QT配置及如何打开他人编写的程序 by 十月旧城
关于Visual Studio下载Qt插件很慢的解决方案之一 by 我不是萧海哇~~~~
VS2017 VS2019安装最新版本的Qt插件出现error reading VS project settings by 走好每一步



