c++之qt学习 基本介绍 界面设计 串口

qt基类介绍

在Qt中,创建工程时基类QWidget表示创建一个基于 QWidget 的窗口应用程序,而其他选项则表示不同类型的应用程序。

下面是几个常见的Qt工程类型及其对应的选项:

  • 控制台应用程序(Console Application):使用QCoreApplication作为应用程序类,没有图形用户界面。
  • 主窗口应用程序(Main Window):使用QMainWindow作为主窗口,可以通过添加菜单栏、工具栏等功能来创建复杂的应用程序。
  • 对话框应用程序(Dialog):使用QDialog作为主窗口,常用于包含少量控件的小型应用程序或功能性对话框。
  • 控件应用程序(Widget):使用QWidget作为主窗口,可以自由布局和组合多个控件,适用于自定义控件和复杂的用户界面。

除了上述常见的类型,Qt还提供了很多其他类型的应用程序模板,比如OpenGL应用程序、Qt Quick应用程序等。每个模板都有其特定的用途和功能,开发者可以根据实际需求选择并进行定制。

需要注意的是,选择不同类型的应用程序会影响生成的代码和文件结构,但不会限制你使用任何Qt库或控件。因此,在选择应用程序类型时,应该根据实际需求选择最合适的类型,并根据需求使用Qt提供的各种功能和工具来进行开发。

qt不同版本

https://blog.csdn.net/weixin_43577616/article/details/120889646

qt下载

视频中推荐5.11.1版本,选择相应的系统安装包。
例如 windows为exe,mac为dmg,linux为run

注册账号密码进行安装,安装路径不能有中文。
选择安装组件

在这里插入图片描述
组件有对应的联系配置
视频中勾选了mingw , android x86,android armv7
勾选 qt visual keyboard, qt script
tools中qt creater 4.6.2,第二个mingw

打开qt creater

创建cpp工程

pro文件为配置文件

制作简单qt界面

qt工程创建,application
在这里插入图片描述
在这里插入图片描述
工程文件分析
在这里插入图片描述

ui界面

在这里插入图片描述

点击forms,双击ui文件,就可以进入ui编辑器

ui面编辑板
q label
q line edit echo mode
push button

直接编译,编译成功后直接弹出界面

qt信号和槽

1 为了方便分析代码,给相应的控件改名
2 信号就是 相应控件发出的特定信号
帮助 索引 查找 pushbutton

槽就是函数的意思,把槽函数绑定在一个控件的信号上

3 关联槽和信号
一个按钮关联槽函数

自动关联,手动选择相应空间,右键转到槽
他会现在widget.h里面声明槽函数
槽函数只能声明到private slots或者public里面

widget.cpp内实现槽函数

手动关联

使用connect函数,需要和自动一样在h文件里声明该函数( logoBt_clicked_clots() )
在这里插入图片描述
connect当对象a发出b信号时候就会出发c引起d

给界面增加图片

1 右键class1工程文件夹 --------添加新的文件(就是最上面的class1 文件夹)
qt – qt resource file ------ 文件名为 pic.qrc

2 把图片添加到工程下
pic.qrc 右键 open with 资源编辑器

3 修改前缀 添加按钮下有添加前缀和添加文件两个选项
ctrl + s 保存, 添加—添加文件,选中图片

4 引用这个图片,打开ui界面。拖入label,删除文字, 右键label--------改变样式表。
添加资源,选中图片
在这里插入图片描述

5 添加文字,加入label,同样可以为相应的按钮增加图片
在这里插入图片描述

6 图标下载 easyicon

界面布局

qt下有三种布局,在工具栏上方,企鹅最小尺寸设置
1 水平布局
2 垂直布局
3 栅格布局

选中所有垂直布局
栅格布局

界面也会随着放大缩小变换

放置horizontal spacer
在这里插入图片描述

布局不会影响代码

界面切换

1 创建1个新的ui界面
2 工程class添加新文件, qt 设计师界面类, 选择 weigdt
3 设计新的界面,将其界面大小与之前的设计为一样
4 添加多个按钮和 图片
在这里插入图片描述

设置弹簧 水平布局
在这里插入图片描述

更改代码

在 widget.cpp文件中,加入新的设置代码

1 加入头文件
include “ctrl。h”
在这里插入图片描述

登录触发代码,进入到新的窗口

设置返回代码
转到槽
在这里插入图片描述
相当于关闭窗口

验证账号密码

在相应的登录接口中添加代码


Void Widget::logoBt_clicked_slots()
{
	QString unsename = ui->userEdit->text();
	QString passwad  =  ui->passwdEdit->text();

	if(userName=="123" && passwad=="xxx")
	{	ctrl *ct = new ctrl;
	ct->setGeometry(this->geometry());
	ct->show();
	}

	ctrl *ct = new ctrl;
	ct->setGeometry(this->geometry());
	ct->show();

}

qt的三驾马车

1 串口编程
2 网络编程
3 qt下的GPIO

串口助手

1 新建工程 qt widget工程

在这里插入图片描述

做好ui界面

实现逻辑功能
接收框使用 plain text edit,设置read only
相应的下拉候选框 combo box 以及label
发送框 line edit
按钮 pushbutton
groupbox 容器 用于广告文字显示
label设置最小大小,栅格布局
在这里插入图片描述
在这里插入图片描述

为下拉框加入属性信息

选中拉框框 双击 直接编辑,通过 + 号添加,以及通过 上下 调整位置

要对 整体复选框和label 进行删格排列,否则会整齐大小不一

需要对相应复选框设置常用默认值,
选中相应目标,在右侧设置一栏设置
在这里插入图片描述

串口号栏设置

在这里插入图片描述
将 下拉框 名称设置为 seialCb

相应的波特率,数据为,停止位等都设置名字
相应的按钮以及发送接收框也是

进一步配置

在seial.pro里配置代码

添加模块
QT  += core gui serialport

接着在 widget.cpp内
添加头文件
#include <QSerialPortInfo>

在这里插入图片描述

添加了 qstringlist 以及 foreach查找端口名并加入string list 然后把 端口名给到ui的seialcb输出

串口实现逻辑功能

在widget.h中设置
添加头文件

#include <QSerialPort>

在这里插入图片描述

在widget.cpp中设置
在这里插入图片描述
建立一个串口对象,将外部传入的this指针作为参数进行初始化

初始化串口, 利用打开按钮 触发串口打开,这用到信号槽

两种方式 1 connect函数 2 右键 转到槽

在这里插入图片描述

widget.cpp中
在槽函数中设置
在这里插入图片描述
在这里插入图片描述
在下面

if(ui->baundrateCb ->currentText() == "4800"){

	baudRate = QSerialPort::Baud4800;
}
else if(ui->baundrateCb ->currentText() == "9600")
{}
else if(ui->baundrateCb ->currentText() == "115200")
{}

在这里插入图片描述
在这里插入图片描述
报错,应该是SetPortName
这里往下添加

需要头文件 #include<QMessageBox>
if(serialPort->open(QIODevice::ReadWrite) == true)
{
	QMessageBox::information(this,"提示""chenggong");
}else{
	QMessageBox::critical(this,"提示","失败");
}

关闭功能

在这里插入图片描述

接收功能

在相应位置    foreach前面加入
connect(serialPort, SIGNAL(),this,SLOT());
可查找serialport有哪些信号
connect(serialPort, SIGNAL(readyRead()),this,SLOT(serialPortReadyRead_Slot()));
当串口有东西可读就会触发槽函数,把读到的buf显示到ui框中


在widget.h中声明槽函数
在 private slots下
void serialPortReadyRead_Slot();

在widget。cpp中实现,添加头文件 #include<Qstring>
void serialPortReadyRead_Slot()
{
	QString buf;
	buf = QString(serialPort->readAll());    他这里serial 还是 serila有点分不清了
	ui->recvEdit->appendPlainText(buf);

}

发送功能 和 清空功能

发送按钮右键转到槽,关联clicked()
在widget.cpp中

类内声明,类外实现
void Widget::on_sendBt_clicked()
{
	serilaPort->write(ui->sendEdit->text().toLocal8Bit().date());	
}


在这里插入图片描述

Q_OBJECT

Q_OBJECT 是 Qt 宏定义中的关键字之一,用于启用 Qt 的元对象特性。元对象特性是一种 Qt 框架提供的机制,可以实现以下功能:

  • 对象的动态属性(通过 Q_PROPERTY 宏定义)
  • 信号和槽机制(通过 signals 和 slots 关键字)
  • 静态元对象信息(通过 metaObject() 函数)

在使用上述特性时,需要在类的声明中添加 Q_OBJECT 宏,以便 Qt 编译器能够将该类转换为元对象。当程序运行时,Qt 框架会为每个具有 Q_OBJECT 宏的类创建一个元对象,其中包含类的静态元信息,如类名、信号的名称和参数、槽的名称和参数、以及动态属性的名称和类型等。

需要注意的是,当添加或修改 Q_OBJECT 宏后,需要运行 Qt 的元对象编译器(MOC)来生成相应的源代码文件。这是因为,在 Qt 框架中,信号和槽机制是通过 MOC 来实现的,而 MOC 只会处理包含 Q_OBJECT 宏的头文件。

总之,Q_OBJECT 宏是使用 Qt 元对象特性的必要条件之一,它可以让开发者更加方便地使用 Qt 框架的众多特性,并且可以使用 Qt Creator 等集成开发环境自动为代码生成 MOC 处理后的代码文件。

宏定义

宏定义(Macro Definition)是一种预处理指令,用于将一个标识符或代码片段替换为指定的文本。在C、C++、Objective-C等编程语言中,宏定义可以通过 #define 关键字来创建。

宏定义的基本语法如下:

#define 宏名 子串

其中,宏名是要定义的标识符,子串则是用于替换宏名的文本或代码片段。当程序中出现宏名时,编译器会将其替换为子串,并在编译之前进行预处理。

例如,以下代码定义了一个宏 MAX,表示取两个值的最大值:

#define MAX(a, b) ((a) > (b) ? (a) : (b))

当程序中出现 MAX(a, b) 时,编译器会将其替换为 ((a) > (b) ? (a) : (b)),并在编译之前进行预处理。因此,下面的代码:

int x = 10, y = 20;
int z = MAX(x, y);

会被替换为:

int x = 10, y = 20;
int z = ((x) > (y) ? (x) : (y));

需要注意的是,宏定义虽然提供了一种方便的代码重用和简化代码的方式,但也存在一些潜在的问题。例如,宏定义可能会导致代码可读性差、类型错误和命名冲突等问题,因此在使用宏定义时需要谨慎,并根据实际需求选择最合适的方式来实现代码复用和简化。

explicit

explicit 是 C++ 中的关键字之一,用于声明单个参数的构造函数或转换函数时,表示该构造函数或转换函数只能显式调用,不能隐式调用。

例如,以下代码定义了一个类 A,其中包含一个 int 类型的成员变量:

class A {
public:
    explicit A(int n) : m_n(n) {}
private:
    int m_n;
};

在上述代码中,A 类定义了一个带有一个 int 类型参数的构造函数,并将其声明为 explicit。这意味着,当使用以下语句创建 A 类对象时,

A obj = 10;

编译器会报错,因为这里使用了隐式转换,而 explicit 声明的构造函数只能显式调用。正确的写法是:

A obj(10);

需要注意的是,当一个构造函数被声明为 explicit 时,在使用该构造函数进行显式初始化时,不需要加上额外的括号或其他语法符号,可以直接使用构造函数的参数来进行初始化。例如:

A obj = A(10); // 等价于 A obj(10)

总之,explicit 关键字可以避免编译器进行隐式类型转换,从而提高代码的可读性和安全性。在设计类的接口时,如果某个单参数构造函数或类型转换函数应该被限制为显式调用,则可以使用 explicit 来进行声明。

private slots

private slots 是 Qt 中的关键字,用于声明一个私有槽函数。槽函数与普通的成员函数类似,是一种响应特定信号的函数,用于处理与信号相关的事件。槽函数可以被信号连接调用,从而执行一些特定的操作。

在 Qt 中,槽函数分为两种类型:公共槽(public slots)和私有槽(private slots)。公共槽可以被任何代码调用和连接信号,因此通常用于界面控件的操作和通信功能的实现。而私有槽只能被类内部的其它函数或代码调用,不能被连接到信号,因此通常用于实现部分内部逻辑和细节的处理。

使用 private slots 关键字可以将槽函数设置为私有的,从而限制调用者和外部代码对其的访问。例如:

class MyClass : public QObject {
    Q_OBJECT
public:
    explicit MyClass(QObject *parent = nullptr);
private:
    void myPrivateSlot();
private slots:
    void myPrivateSlot2();
};

在上述代码中,MyClass 类定义了两个私有槽函数 myPrivateSlot() 和 myPrivateSlot2()。前者是普通的私有函数,只能由 MyClass 类内部的其它成员函数调用;后者则被声明为 private slots,既可以被 MyClass 内部的其它成员函数调用,也可以被连接到信号。不过,由于其被声明为私有槽,因此外部代码无法使用 myPrivateSlot2() 函数。

需要注意的是,使用槽函数时必须先声明 Q_OBJECT 宏,以启用 Qt 的元对象系统支持,从而能够在运行时实现信号和槽之间的连接。

打包为windows软件

因为要把写好的程序发给用户来用
源码也不是随便给别人

怎么打包和部署,把工程切换到release模式
在这里插入图片描述

release模式: 基本没有调试信息
debug 有很多调试信息

2 找到release模式下 编译构建的文件夹

3 改一下图标。
注意 图标格式必须为 .ico这个格式,其他不行
在这里插入图片描述
直接在pro文件中,写上
RC_ICONS = serial_icon.ico
把图标添加到工程目录下

4 编译后图标就变了
在这里插入图片描述

封包操作 需要用到qt的控制台

window菜单栏里直接搜 qt, 出现终端。
使用qt控制台。

需要在电脑桌面张创建一个新的文件夹,不能有中文路径,然后
把工程里的exe文件放到该文件夹下。

qt控制台内进入到 文件夹的路径下。
cd /d 路径
dir
在这里插入图片描述

执行指令
windeployqt serial.exe
使用windeployqt工具把我们新创建的exe文件自动配置
在这里插入图片描述
自此就有一个正常的exe可执行文件了

exe需要相应的动态依赖库才能执行

是的,通常情况下,通过编译生成的可执行文件(.exe文件)在运行时需要相应依赖的动态链接库(DLL文件)才能正常运行。

这是因为,在编译程序时,编译器将程序所依赖的外部函数和库的引用链接到可执行文件中。对于静态链接库(.lib文件),编译器将链接库的目标代码直接嵌入可执行文件中,从而使得可执行文件在运行时不再依赖该链接库;而对于动态链接库(.dll文件),编译器只将链接库的引用信息嵌入到可执行文件中,而不包含链接库的实际目标代码。因此,在运行可执行文件时需要动态加载并使用相应的动态链接库。

如果没有安装或正确配置相应的动态链接库,那么在运行可执行文件时就会出现找不到符号或无法加载 DLL 等错误,导致程序无法正常运行。为了避免这种问题,通常建议将程序所需的 DLL 文件一起打包,或者在程序运行前确保相应的 DLL 文件已经存在并设置好了可以被搜索到的路径。

在 Windows 系统中,可以使用工具如 Dependency Walker 来查看可执行文件的依赖关系,并确定程序所需的 DLL 文件。同时,也可以使用某些工具或方法来打包 DLL 文件,或在程序中动态加载和释放 DLL 文件,以提高程序的兼容性和可移植性。

qrc后缀

实际上,.qrc 后缀是用于指示 Qt 资源文件(Qt Resource Collection File)的文件类型。.qrc 文件是一种用于在 Qt 应用程序中管理资源的 XML 格式文件。它允许将图像、字体、音频、样式表等文件打包到应用程序中,并使用特殊的资源路径进行访问。

在 Qt 中使用 .qrc 文件时,您需要先创建并编辑一个 .qrc 文件,然后在项目中将其添加为资源文件。在 .qrc 文件中,您可以指定各种资源文件的路径和名称。通过将资源文件添加到 .qrc 文件中,您可以轻松地在应用程序中访问和使用这些资源。

因此,当您在代码中使用 “:/pic.qrc” 这样的路径时,它实际上是引用了在 .qrc 文件中定义的名为 “pic” 的资源。如果您的 .qrc 文件中定义了一个名为 “pic” 的资源,那么 “:/pic.qrc” 这个路径就可以正确地访问该资源。

请注意,.qrc 后缀是 Qt 开发中约定的命名规则,它不代表特定的文件类型或格式,而只是表示该文件是一个 Qt 资源文件。

将图标加到按钮旁边

在这里插入图片描述
在这里插入图片描述
将图标放入到qt工程目录下的images文件夹下
在这里插入图片描述
add new ----- qt resource file ----在resources里面add files
针对按钮的 属性 icon可以选择图片
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值