QT 写入 mysql 中字段为 null,并读取可能为 null 的字段

需求 使用 qt 使用 mysql 的时候,某些字段可能为 null,那么如何写入?读取时如何判断? 解决 写入 写入比较简单,明文说明是 null 即可. query.exec(QString("update rfid_match set RFID2=null where WZSFM='%1'").arg(model->item(modelReIndex,4)->text())); 读取 读取时候,需要使用 isNull 判断是否为 null。 QSqlRecord::isNull QVariant::isNull 参考 Qt中SQL语句update同时更新多字段及设置字段值为空的方法 Qt数据库SQL语句绑定方式与插入空值 C++Qt开发——操作MySQL数据库 Qt: QSqlRecord字段值为null时注意事项 Qt: QSqlRecord字段值为null时注意事项

<span title='2023-11-14 10:18:00 +0800 CST'>2023-11-14</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;33 words&nbsp;·&nbsp;RamLife

QT 显示多图片

需求 qt 显示多张 pixmap 解决 图片多了之后,需要耗费更多的资源。 QLabel + setPixmap: 简单,但是使用 cpu 资源 drawPixmap: 直接使用 gpu 资源 QPixmap image1; image1.load(":/images/chuyin1.jpg"); void PaintWidget::paintEvent(QPaintEvent *) { //void QPainter::drawPixmap(int x, int y, int width, int height, const QPixmap &pixmap) QPainter painter(this); int x1 = ui->view1Frame->pos().x(); int y1 = ui->view1Frame->pos().y(); painter.drawPixmap(x1,y1,ui->view1Frame->width(),ui->view1Frame->height(),image1); } 参考 【Qt】使用QPainter的drawPixmap()绘制多幅图片

<span title='2023-11-13 11:43:00 +0800 CST'>2023-11-13</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;49 words&nbsp;·&nbsp;RamLife

QT chart 转 图片

需求 qt 需要把 chart 曲线转为 pixmap 解决 这个其实很简单,直接调用 api 即可。 printer_.SetPixmap(test_chart_->get_view()->grab()); pPainter->drawPixmap(image_border, y, pixmap_); QPixmap p = view->grab(); QImage image = p.toImage(); image.save("chart.png"); 参考 Qt中将QChart图像导出成图片的问题 求助求助!!!QChart 图表转到QPixmap 如何将Qt窗口的内容转化为图片?

<span title='2023-11-13 10:43:00 +0800 CST'>2023-11-13</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;28 words&nbsp;·&nbsp;RamLife

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....

<span title='2023-11-12 10:18:00 +0800 CST'>2023-11-12</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;159 words&nbsp;·&nbsp;RamLife

android setText 提示: Do not concatenate text displayed with setText.

需求 tvWeight.setText("当前体重:" + weight + "公斤"); 这样使用,会提示: Do not concatenate text displayed with setText. Use resource string with placeholders. 解决 需要先在 strings.xml 中申明字符串格式, 然后使用 String.format 来设置替换的实际值。 s: 字符串 d: 整数 f: 浮点数 <string name="current_time">当前日期:%1$d年%2$d月%3$d日</string> // 设置显示当前日期 TextView tvDate = (TextView) findViewById(R.id.main_tv_date); tvDate.setText(String.format(getResources().getString(R.string.current_time),year,month,day)); 参考 【Android】解决TextView.setText提示Do not concatenate text displayed with setText. Use resource string

<span title='2023-11-11 18:10:00 +0800 CST'>2023-11-11</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;53 words&nbsp;·&nbsp;RamLife

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

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

<span title='2023-11-10 14:36:00 +0800 CST'>2023-11-10</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;31 words&nbsp;·&nbsp;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 !...

<span title='2023-11-10 13:58:00 +0800 CST'>2023-11-10</span>&nbsp;·&nbsp;2 min&nbsp;·&nbsp;252 words&nbsp;·&nbsp;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....

<span title='2023-11-09 18:51:00 +0800 CST'>2023-11-09</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;209 words&nbsp;·&nbsp;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....

<span title='2023-11-07 10:18:00 +0800 CST'>2023-11-07</span>&nbsp;·&nbsp;2 min&nbsp;·&nbsp;275 words&nbsp;·&nbsp;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存储大数据字符串

<span title='2023-11-06 16:34:00 +0800 CST'>2023-11-06</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;117 words&nbsp;·&nbsp;RamLife