当前位置: 首页 > news >正文

完成QT上位机(八)

一. 正式开始设计界面

这一章节我们将完成QT上位机的设计,如果有同学对QtCreater的使用不太熟悉的,可以参考下面的链接

Qt 快速入门系列教程 · Qt 快速入门系列教程 (gitbooks.io)icon-default.png?t=N7T8https://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语句。

步骤

  1. 创建数据库:

    • 如果您还没有创建数据库,首先需要创建一个。
  2. 创建表:

    • 创建一个包含BLOB类型的字段来存储图像数据的表。
  3. 插入数据:

    • 插入图像数据到表中。

数据刷新

1. 使用定时器

导致UI卡顿

2. 使用QtConcurrent

QtConcurrent库提供了线程池,可以将任务异步提交给线程池执行,而不会阻塞GUI线程。

QMainWindow中使用QtConcurrent模块执行异步任务可以帮助你避免UI卡顿,同时充分利用多核处理器的优势。下面是一个具体的示例,展示了如何在QMainWindow中使用QtConcurrent::run来执行一个异步任务,并在任务完成后更新UI。

但后来发现在QtConcurrent中使用Qt的SQL模块(QtSql)进行MySQL数据库查询时遇到错误,通常是因为SQL查询或数据库操作不能在非主线程中执行。QtSql的数据库API并不是线程安全的,也就是说,所有的数据库操作应该在同一个线程中进行,通常是主线程。

3. 所以还是直接采用定时器

把查询从六次查询减少的一次,并且0.5秒进行一次定时中断就不卡顿了

三. 遇到的问题

2.

要使用表格必须添加

QT_CHARTS_USE_NAMESPACE

1. 运行后,工具栏出现两个,导致按钮按下触发两次

首先查看是否真有两个工具栏

qDebug() << "Number of toolbars:" << w.findChildren<QToolBar*>().count();

运行后,发现toolbar的数量为2,说明重复出现了一个toolbar,但是我们在.ui文件中设计的时候只添加了一个toolbar

 

最终放弃使用Designer添加工具栏,而是直接用代码中添加ToolBar并且添加动作

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 适合于baichuan大模型的QA模板
  • Python | Leetcode Python题解之第322题零钱兑换
  • 简单了解一下 CPU 和 GPU 的区别
  • 实训day22(8.6)
  • Day.35 | 121.买卖股票的最佳时机 122.买卖股票的最佳时机II 123.买卖股票的最佳时机III
  • 力扣1562.查找大小为M的最新分组
  • LLM在线理解;神将网络理解;transform架构
  • log4j反序列化-流程分析
  • 单机部署ELK + Filebeat 收集应用日志
  • C++:map容器的使用
  • RangePicker 表单赋值引发的无限更新问题(Maximum update depth exceeded)
  • 【JS】一篇BOM详解笔记 | b站李立超
  • Linux:shell环境bash配置文件讲解(用户登录弹提示语的实现)
  • 算法刷题day28|动态规划:509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
  • 【C语言】指针、多维数组零碎知识点
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • 230. Kth Smallest Element in a BST
  • Brief introduction of how to 'Call, Apply and Bind'
  • orm2 中文文档 3.1 模型属性
  • Spring-boot 启动时碰到的错误
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 工作手记之html2canvas使用概述
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 1.Ext JS 建立web开发工程
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • ​flutter 代码混淆
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • #Z0458. 树的中心2
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • %check_box% in rails :coditions={:has_many , :through}
  • (1)Android开发优化---------UI优化
  • (2022 CVPR) Unbiased Teacher v2
  • (AngularJS)Angular 控制器之间通信初探
  • (Python第六天)文件处理
  • (Windows环境)FFMPEG编译,包含编译x264以及x265
  • (代码示例)使用setTimeout来延迟加载JS脚本文件
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (附源码)ssm高校实验室 毕业设计 800008
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (区间dp) (经典例题) 石子合并
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)为C# Windows服务添加安装程序
  • (转)项目管理杂谈-我所期望的新人
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • ***检测工具之RKHunter AIDE
  • **PHP分步表单提交思路(分页表单提交)
  • ./和../以及/和~之间的区别
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .NET Core WebAPI中使用swagger版本控制,添加注释