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时注意事项

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

QT 打印 pdf

需求 qt 需要打印 pdf 解决 简单的打印 pdf,可以使用 QPrinter. void Printer::Print(QPrinter *printer) { qDebug() << "Printer::Print"; QPainter *pPainter = new QPainter(printer); int page_border = 30 * line_ratio_; int nPdfWidth = pPainter->viewport().width(); int nPdfHeight = pPainter->viewport().height(); qDebug() << "pdf width: " << nPdfWidth << ", height: " << nPdfHeight; //绘制标题 int y = 10 * line_ratio_; int nLineHeight = 60 * line_ratio_; y = PrintInfo(pPainter, nPdfWidth, page_border, y, nLineHeight); qDebug() << "after PrintInfo y: " << y; y += 10 * line_ratio_; pPainter->drawLine(QLineF(page_border, y + 15 * line_ratio_, nPdfWidth - page_border, y + 15 * line_ratio_)); y += 30 * line_ratio_; y = PrintImage(pPainter, nPdfWidth, page_border, y, nPdfHeight * image_ratio_); qDebug() << "after PrintImage y: " << y; y = PrintTable(pPainter, nPdfWidth, page_border, y, nLineHeight); qDebug() << "after PrintTable y: " << y; delete pPainter; } int Printer::PrintInfo(QPainter *pPainter, int nPdfWidth, int page_border, int y, int nLineHeight) { pPainter->setFont(QFont("宋体", 18, QFont::Bold)); pPainter->drawText(QRect(0, y, nPdfWidth, 100), Qt::AlignCenter, tr(organization_name_....

2023-11-13 · 2 min · 312 words · 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()绘制多幅图片

2023-11-13 · 1 min · 49 words · 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窗口的内容转化为图片?

2023-11-13 · 1 min · 28 words · 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....

2023-11-12 · 1 min · 159 words · 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

2023-11-11 · 1 min · 53 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