一. 正式开始设计界面
这一章节我们将完成QT上位机的设计,如果有同学对QtCreater的使用不太熟悉的,可以参考下面的链接
Qt 快速入门系列教程 · Qt 快速入门系列教程 (gitbooks.io)https://wizardforcel.gitbooks.io/qt-beginning/content/
二. 数据库处理
在qtsql数据库中建立两个表,一个表用来保存各个传感器的数据,一个表用来保存对电机等装置进行控制的信息。
让控件融入进背景:
修改样式表
QMainWindow#MainWindow
{
border-image:url(:/new/prefix1/picture/pic/one.png);
}
//dbui->setStyleSheet("background-image: url(:/new/prefix1/picture/pic/one.png);");
// // 设置背景图片
// QString imagePath = ":/new/prefix1/picture/pic/one.png";
// QString styleSheet = QString("background-image: url(%1);"
// "background-repeat: no-repeat;"
// "background-position: center;")
// .arg(imagePath);
// dbui->setStyleSheet(styleSheet);
//w.setStyleSheet("background-image: url(:/new/prefix1/picture/pic/one.png);");
三. 摄像头功能
特别讲述QT的摄像头部分
在MySQL中,您可以使用BLOB
类型来存储图像数据。BLOB
是二进制大对象(Binary Large Object)的缩写,它可以用来存储大量的二进制数据,比如图像文件、音频文件或视频文件等。下面是创建包含图像字段的表的具体步骤和SQL语句。
步骤
-
创建数据库:
- 如果您还没有创建数据库,首先需要创建一个。
-
创建表:
- 创建一个包含
BLOB
类型的字段来存储图像数据的表。
- 创建一个包含
-
插入数据:
- 插入图像数据到表中。
数据刷新
1. 使用定时器
导致UI卡顿
2. 使用QtConcurrent
QtConcurrent库提供了线程池,可以将任务异步提交给线程池执行,而不会阻塞GUI线程。
在QMainWindow
中使用QtConcurrent
模块执行异步任务可以帮助你避免UI卡顿,同时充分利用多核处理器的优势。下面是一个具体的示例,展示了如何在QMainWindow
中使用QtConcurrent::run
来执行一个异步任务,并在任务完成后更新UI。
但后来发现在QtConcurrent
中使用Qt的SQL模块(QtSql
)进行MySQL数据库查询时遇到错误,通常是因为SQL查询或数据库操作不能在非主线程中执行。QtSql
的数据库API并不是线程安全的,也就是说,所有的数据库操作应该在同一个线程中进行,通常是主线程。
- 所以还是直接采用定时器
把查询从六次查询减少的一次,并且0.5秒进行一次定时中断就不卡顿了
三. 遇到的问题
要使用表格必须添加
QT_CHARTS_USE_NAMESPACE
1. 运行后,工具栏出现两个,导致按钮按下触发两次
首先查看是否真有两个工具栏
qDebug() << "Number of toolbars:" << w.findChildren<QToolBar*>().count();
运行后,发现toolbar 的数量为2,说明重复出现了一个toolbar ,但是我们在.ui文件中设计的时候只添加了一个toolbar
最终放弃使用Designer添加工具栏,而是直接用代码中添加ToolBar并且添加动作