QT 使用 QTableView 和 QSqlQueryModel 配合显示数据

需求 qt 中需要从数据库中搜索数据,并在表格中显示 解决 设置 view_ = new QTableView(this); query_model_ = new QSqlQueryModel(this); selection_model_ = new QItemSelectionModel(query_model_, this); view_->setModel(query_model_); view_->setSelectionModel(selection_model_); view_->setEditTriggers(QAbstractItemView::NoEditTriggers); view_->setSelectionMode(QAbstractItemView::SingleSelection); view_->setSelectionBehavior(QAbstractItemView::SelectRows); view_->setAlternatingRowColors(true); 搜索并显示 QString query_command = "SELECT q.`flag_check`, q.`strip_id`, q.`analysis_datetime`, q.`ip`, q.`analysis_id`, qt.`name`, " "r.`type`, q.`value_fix`, q.`value_act_fix`, q.`value_cr_fix`, " "q.`reference_range`, q.`quality_no`, " "(CASE WHEN q.`flag_normal` = 0 THEN '不通过' " "WHEN q.`flag_normal` = 1 THEN '通过' " "ELSE '不通过' END), q.`device_sn` " "FROM (quality AS q inner join quality_type AS qt ON q....

2023-11-12 · 1 min · 159 words · RamLife

__attribute__((weak)) 修饰的函数没有被覆盖

需求 定义了同名函数后,原来的 __attribute__((weak)) 修饰的函数并没有被覆盖 ? 解决 打开生成的 map 文件,经过搜索,只找到了原来的函数,并没有找到新定义的函数。 在头文件中增加了新定义函数的声明 int _write(int file, char *ptr, int len);, 重新编译后,打开 map 文件,就可以找到新定义的函数了。 所以这个问题还是因为没有在头文件中声明,导致 printf 再调用的时候,只找到了弱定义的 write. 参考 ARM 之十一__weak 和 attribute((weak)) 关键字的使用 弱符号_attribute_((weak))

2023-11-10 · 1 min · 31 words · RamLife

stm32cubeide threadx 开启 stack check

需求 如何使用 stm32cubeide 开启 threadx 中的 stack check ? 解决 使能 stack check 在项目属性中, C/C++ Build -> Settings -> MCU GCC Compiler -> Preprocessor 中添加 TX_ENABLE_STACK_CHECKING 在 MCU G++ Compiler 中添加同样的 TX_ENABLE_STACK_CHECKING printf 函数 #include "stdio.h" #include "usart.h" int _write(int file, char *ptr, int len) { HAL_UART_Transmit(&huart1, (uint8_t*)ptr, len, 0xFFFF); return len; } *注意: 需要在头文件中增加 int _write(int file, char *ptr, int len); , 否则可能无法覆盖由 __attribute__((weak)) 修饰的原来 _write. * 处理函数 VOID StackErrorHandler(TX_THREAD * thread_ptr) { printf("=============================================================== \n"); printf("如下任务被检测出栈溢出 \n"); printf("=============================================================== \n"); printf(" 任务优先级 任务栈大小 当前使用栈 最大栈使用 任务名 \n"); printf(" Prio StackSize CurStack MaxStack Taskname \n"); TX_THREAD *p_tcb; /* 定义一个任务控制块指针 */ p_tcb = &ServiceVibration; /* 遍历任务控制列表TCB list),打印所有的任务的优先级和名称 */ do { if (p_tcb !...

2023-11-10 · 2 min · 252 words · RamLife

stm32cubeide 使用 threadx

需求 如何使用 stm32cubeide 运行 threadx? 解决 启用 threadx core 打开项目 ioc 文件, Middleware and software Packs -> THREADX -> Mode 勾选 core 下方的 configuration 中, TX_TIMER_TICKS_PER_SECOND 设置为 1000. Memory Configuration 中的 ThreadX memory pool size 也设置大一点,这个是默认生成的字节池的大小。 左侧 System Core 中的 SYS, 修改 Timebase Source 为 TIM7. 这个一定要修改,因为 HAL 的基准是 systick, threadx 的基准也是 systick, 如果不修改,会导致不自动生成 systick 的 handler 函数,导致进入 hard fault. 至于到底修改为哪个 tim, 这个就随便了。 保存自动生成代码。 使用 threadx 新建文件,创建 UINT ThreadInit(TX_BYTE_POOL * byte_pool) 这样的函数,然后在 app....

2023-11-09 · 1 min · 209 words · RamLife

QT 中 QByteArray 介绍

需求 QByteArray 有哪些常用方法? 解决 访问 [], data[]: 可读可写 at(), constData[]: 只读 增删改查 append, prepend: 后加,前加 replace: 替换 remove: 删除 indexOf, lastIndexOf: 搜索 转换 hex 和 字符串互转 QByteArray text = QByteArray::fromHex("517420697320677265617421"); text.data(); // returns "Qt is great!" QByteArray ba; ba.resize(3); ba[0] = 0x30; ba[1] = 0x31; ba[2] = 0x32; qDebug() << ba.toHex(); //return "303132" 数值转字符串 int n = 63; qDebug()<<QByteArray::number(n); // returns "63" qDebug()<<QByteArray::number(n, 16); // returns "3f" qDebug()<<QByteArray::number(n, 16).toUpper(); // returns "3F" qDebug()<<QByteArray::number(n, 2); // returns "111111" qDebug()<<QByteArray::number(n, 8); // returns "77" QByteArray ba; int n = 63; ba....

2023-11-07 · 2 min · 275 words · RamLife

mysql 常用数据类型

需求 mysql 常用的数据类型 解决 常用的就是 整型,二进制,文本 整型 类型 存储字节 说明 TINYINT 1 -128 ~ 127 SMALLINT 2 -32768 ~ 32767 MEDIUMINT 3 -8388608 ~ 8388607 INT (INTEGHR) 4 -2147483648 ~ 2147483647 BIGINT 8 -9223372036854775808 ~ 9223372036854775807 blob 类型 存储字节 说明 TINYBLOB 0 ~ 255 字节 短文本二进制 BLOB 0 ~ 65 KB 普通二进制 MEDIUMBLOB 0 ~ 16 MB 长文本二进制 LONGBLOB 0 ~ 4 GB 极大文本二进制 text 类型 存储大小 说明 TINYTEXT 0 ~ 255 字节 一般文本字符串 TEXT 0 ~ 65 535 字节 长文本字符串 MEDIUMTEXT 0 ~ 16 772 150 字节 较大文本数据 LONGTEXT 0 ~ 4 294 967 295 字节 极大文本数据 参考 MySQL INT、TINYINT、SMALLINT、MEDIUMINT、BIGINT(整数类型) MySQL 中 blob 和 text 数据类型详解 怎么在MySQL数据库保存图片 MySQL中整各种int类型的范围和存储大小 MySQL int 类型长度有啥用? int(11) 和 int(20) 有啥区别? Mysql存储大数据字符串

2023-11-06 · 1 min · 117 words · RamLife

QT 打印当前线程

需求 qt 打印当前线程进程 解决 当前线程指针: QThread::currentThread() 当前线程: QThread::currentThreadId() 当前进程: QCoreApplication::applicationPid() 参考 QT打印当前线程地址 【Qt线程-6】获取当前线程id,thread()和currentThreadId(),不是想当然那样,不使用信号槽可能看不出区别

2023-11-06 · 1 min · 13 words · RamLife

mysql 存储过程分页操作

需求 mysql 存储过程做分页操作 解决 参考: SQL存储过程实现数据分页功能 mysql中用存储过程做分页操作 SQL Server存储过程之通用数据分页 SQL Server存储过程学习(通俗易懂) MySQL分页查询的5种方法 参考

2023-11-05 · 1 min · 13 words · RamLife

QT 减少控件间的间隙

需求 qt 默认情况下,控件之间的间隙比较大,不好看,需要减少间隙 解决 这个其实很简单,直接调用 api 即可。 layout_->setContentsMargins(0,0,0,0); layout_->setSpacing(0); 参考 【QT】Layout布局间消除间隙(修改layout内置参数) QT 布局管理器设置控件固定大小,控件间隔 QT布局管理器不同部分比例大小设置方法

2023-11-05 · 1 min · 14 words · RamLife

QT 自定义分页

需求 qt 自定义分页控件 解决 具体参考: QT 自定义分页控件 第十四课:采用 Qt 开发翻页/分页/多页窗体组件 参考 QT 自定义分页控件 第十四课:采用 Qt 开发翻页/分页/多页窗体组件

2023-11-05 · 1 min · 16 words · RamLife