开发环境
w11系统
Qt Creator 18.0.0
C++的类概念
1、 一个类:有变量有方法
所以一个类包括cpp文件和h头文件
2、每次创建一个类对象,就会执行一次构造函数;
QT6新建新的类
为什么新建类会单独说明,因为这个会让初学者出错;避免浪费时间;不会出错
file->new file->文件和类 c/c++
使用新建的QT类调用UI
方法1:主窗口共有化ui成员
方法2:把新类的构造函数增加参传递
iap_file::iap_file(QWidget *parent,Ui::Widget *t_ui) : QWidget{parent} { connect(t_ui->iap_openFile,&QPushButton::clicked,this,&iap_file::open_iap_file); }参1:父类是QWidget 参2:为ui类型指针
然后主QWidget新建类对象时候指定传递参数
#include "widget.h" #include "ui_bootload_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); m_iap_file =new iap_file(this,ui); }仿真下使用qDebug()的程应用程序输出为乱码
工具-> 外部->配置->文本编辑器->inteface 找到选择uft8编码
工具-> 外部->配置->文本编辑器->环境 找到选择uft8编码
如上为常规解决方法:如果未能解决
电脑w11设置找到如下:更改系统环境设置
添加完整的QT组件
安装目录下打开:
MaintenanceTool.exe
qt一般安装只会装常用的东西;需要自己去添加更多的组件;开发起来就需要很多组件资源;
qt在工程里面添加资源
QT += serialport
哪里知道qt有什么资源文件
添加完整的QT组件之后:
在安装目录下看到所有的文件资源的文件夹,serialport包含其中:E:\Qt\6.9.3\Src
例程代码获取
1、除了众所周知的进入软件选择例程
2、在QT安装目录下也会有例程代码
本人路径 E:\Qt\Examples
QT6无法执行到信号和槽函数
QT6好像不支持:SIGNAL SLOT
connect(ui->pushButton_OpenUsart,&QPushButton::clicked,this,&Widget:: serial_pro_switch );二维数组定义
动态定义2维数组
2行10列
int row = 2, col = 10; QVector<QVector<int>> array(row, QVector<int>(col));生成的是变量,会在函数退出的时候释放掉QVector<int>* ptrArray= &array[0];指针用法
写入元素方式:
QVector<uint8_t> *data (*data)[2] = 42; // 写入第三个元素(索引2)
指针申请二维数组内存
new方式,需要自己去释放内存
// 使用new动态分配二维数组 QVector<QVector<uint8_t>>* p_array = new QVector<QVector<uint8_t>>( total_array_big_hang_number, QVector<uint8_t>(IAP_MAX_FREAM_LEN) ); // 获取第三行的地址(索引为2) QVector<uint8_t>* third_row = &(p_array->at(2));QT数组
QByteArray *file_ByteArray ; QByteArray temp_sendData;//初始化的数组实际上无存储空间,不能使用data()引用数组地址
file_ByteArray->data()
获取数组的首个元素 0号元素
file_ByteArray->data()[0]
插入另一个数组
在元素【5】的位置上插入“123456”
QByteArray temp_array("123456"); temp_sendData.insert(5,temp_array);数组尾追加变量
temp_sendData.append(变量);类型强制转换
reinterpret_cast<uint8_t *>(file_ByteArray->data()))reinterpret_cast<目标类型>(当前需要转换的类源))
大小端区别
使用Q的时候
总会感觉结构体的成员顺序会随大小端而改变,其实不会
struct Example
{
char a; // 1字节
short b; // 2字节
int c; // 4字节
};
大端
+----------------+----------------+----------------+----------------+ | a | b高 | b低 | c高 | +----------------+----------------+----------------+----------------+ | 0x0000 | 0x0001 | 0x0002 | 0x0003 | +----------------+----------------+----------------+----------------+ | 1 | 2 | 3 | 4 | +----------------+----------------+----------------+----------------+小端
+----------------+----------------+----------------+----------------+ | a | b低 | b高 | c低 | +----------------+----------------+----------------+----------------+ | 0x0000 | 0x0001 | 0x0002 | 0x0003 | +----------------+----------------+----------------+----------------+ | 1 | 2 | 3 | 4 | +----------------+----------------+----------------+----------------+关键差异
| 字段 | 大端模式 | 小端模式 |
|---|---|---|
a | 0x0000 | 0x0000 |
b | 0x0001(高字节) 0x0002(低字节) | 0x0001(低字节) 0x0002(高字节) |
c | 0x0003(高字节) ... 0x0000(低字节) | 0x0003(低字节) ... 0x0000(高字节) |
结论:还是成员a在低字节
QT串口发送完成
未实践
使用 QByteArray data; serialPort->write(data); 写一个大缓存之后 定时检测如下; if (serialPort->bytesToWrite() == 0) { qDebug() << "发送完成(通过定时器检测)"; }两个类之间调用
第一种
A类内,创建B类;A可以调用B,也可以传递A类给B;这样就耦合比较深
第二种
通过第三个类去协调两个类
第三种:
通过指针:分别指向各自的类;但是个人觉得也是第二种的延申
创建信号
就是在类的点H文件中增加一个函数声明,无须实体函数;
signals:
void big_row_complete();
emitbig_row_complete();//是发射信号
没有release模式(QT6)
再将左下角的图标改成release
release发布的程序无法执行
参考:
Qt6程序打包(如何解决Qt程序在其他电脑上无法运行的问题)_qt6打包程序-CSDN博客
找到windeployqt.exe
在安装目录搜索windeployqt.exe
将要发布的程序bootload_pc_app.exe(我的程序)和windeployqt.exe放在非中文文件夹下
文件夹目录C:\Users\18722\Desktop\test1
找到qt的命令窗口
1、英文输入法下输入cmd 如下
C:2、跳转目录:cd C:\Users\18722\Desktop\test1
cd C:\Users\18722\Desktop\test13、输入第三条cmd windeployqt bootload_pc_app.exe
结束
QT6_UI设计——设置控件背景颜色/字体颜色
1、右击选择控件
2、选择背景
一定是选择下拉框;每次都会忘记,每次都出错;
color 颜色
background-color 背景颜色
alternate-background-color 交替背景颜色border-color 边框颜色
border-top-color 边框顶端border-right-color 边框右边
border-bottom-color 边框底部
border-left-color 边框左边
gridline-color 网格颜色
selection-color 选择颜色
selection-background-color 选择背景颜色