栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ QT笔记

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ QT笔记

目录
  • 准备工作
    • 下载链接
    • 安装教程
    • 界面介绍
      • 模式选择器
      • 菜单栏
  • 创建程序的三种方式
    • 手工编码
    • 无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

无UI的向导方式

在新建对话框中选择 Application 中的 Qt Widgets Application。

进入如下界面后选择基类

基类功能
QMainWindow提供一个有菜单栏、工具栏和一个状态栏的应用程序窗口
QWidget是所有用户界面对象的基类。它从窗口系统接收鼠标、键盘和其它事件
QDialog是对话框窗口的基类。主要用于短期任务以及和用户进行简要通讯的顶级窗口

以QDialog为例,工程建立完毕后,有四个文件:**.pro、dialog.h、dialog.cpp、main.cpp。

有UI的向导方式

在上面选择基类的步骤中,勾选创建界面(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){
			...
		}
}
具体限制

信号函数满足以下约束

  1. 函数返回值是void类型
  2. 开发人员只能声明、不能实现信号函数
  3. 信号函数的参数个数、类型由开发人员设定,这些参数的职责是封装类的状态信息,并将这些信息传递给槽函数
  4. 只有QObject及其派生类才可声明信号函数

槽函数满足以下约束

  1. 槽函数和普通的C++成员函数一样,可以被正常调用
  2. 唯一的特殊性就是很多信号可以与其相关联,但对应信号函数的参数个数、类型要一致
  3. 与其关联的信号被发射时,这个槽就会被调用
  4. 槽函数可以是 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();构造一个空字符,即’’
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 
int main(int argc, char *argv[])
{
	//传入图片路径创建图片
	QImage image("G:/workspace2020/QT/4_2/nuist.jpeg");	 //创建image对象
	cout << image.width() << "n" << image.height() << endl; //返回宽和高
}
在Visual Studio C++中使用QT

我看到的非常好地能解决问题的几篇文章
VS+QT配置及如何打开他人编写的程序 by 十月旧城

关于Visual Studio下载Qt插件很慢的解决方案之一 by 我不是萧海哇~~~~

VS2017 VS2019安装最新版本的Qt插件出现error reading VS project settings by 走好每一步

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/971429.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号