QT之项目经验(windows下的sqlite,c++开发)

目录

一、需要时间去磨练gui的调整和优化

1. 借鉴网上开源项目学习
2. gui的布局及调整是磨人的一件事情
3. gui的布局也是可以用组件复刻的
4. 耗时的设备树

二、多线程异步弹窗

三、定时任务动态变更设定

1.确定按钮触发
2.此处监听定时任务时间的改变
3.此处对改变做出具体内容

四、其余内容

五、题外话


一、需要时间去磨练gui的调整和优化

1. 借鉴网上开源项目学习
标注:学习的开源项目名字为《QT-C++-万能XX管理系统-代码和相关资料》(这里未记录下载地址),是着手开发至今的启蒙代码,代码较整洁,还算不错,如有需要评论区留言吧,或者网上搜一搜应该能够找到
标注:上手开发还是要从实操开始,跟随书籍步步进行还是比较慢的。因为这次经历是由于接手要开发一个CS架构的项目,时间紧压力会有尽快上手的情况,也是较快学习编程的一种方式
在这里插入图片描述
2. gui的布局及调整是磨人的一件事情
注:几乎2天时间一直与布局的排列以及微调较劲
注:也是因为每一个系统会有较多的页面要调整,开发期间会参杂着后端代码的开发。回过头来又发现对布局的组件会有生疏,于是辗转反复
3. gui的布局也是可以用组件复刻的如图中提示的【密码不能为空】这样的弹出框组件
注:上述提到的《QT-C++-万能XX管理系统-代码和相关资料》Demo中就有使用到的弹出框组件。
注:这次的项目在此基础上还对组件进行了异步处理。与后端消息接收系统进行了解耦。
在这里插入图片描述
注:较磨人的非布局组件莫属了
注:在刚开始接触QT进行布局模仿学习时,会出现一种奇特的现象:为什么Demo能够办到的布局效果,我照做了,可是样子就是不一样
注:其实答案就在折叠框里。熟练了就会好了
在这里插入图片描述

4. 耗时的设备树
注:在第一张图中的设备树是有编辑、查看以及子查询功能的。在系统管理中就可以进行维护。操作较顺畅,但是调试还是用了不少的时间
在这里插入图片描述
下图是设备树的UI编辑页面
在这里插入图片描述下图是设备树部分代码布局
1 为设备树中tab页的抽象类。2 中为其余页面代码。3 为设备树页面入口方法等
本文描述的内容只是大概的对所作的内容中印象深刻的点进行了轻描淡写。后面还会有更深入的介绍会在这里标注 >>|

在这里插入图片描述

二、多线程异步弹窗

注:消息弹窗异步弹出其实是两个线程之间消息交互的过程 主线程发生的事情在第二个线程收到并创建出来,而不影响主线程的运行在这里插入图片描述

#include "threadinformationmessagebox.h"

#include <QDebug>
#include "app/myhelper.h"

ThreadInformationMessageBox::ThreadInformationMessageBox(QObject *parent) : QObject(parent)
{

}
ThreadInformationMessageBox::ThreadInformationMessageBox(const QString &strTitle, const QString &strMessage)
    : m_strTitle(strTitle),
      m_strMessage(strMessage)
{
}

void ThreadInformationMessageBox::show(const QString &strTitle, const QString &strMessage)
{
    QEventLoop eventLoop;
    auto messageBox = new ThreadInformationMessageBox(strTitle, strMessage);
    connect(messageBox, SIGNAL(destroyed()), &eventLoop, SLOT(quit()));
    messageBox->readyShow();
    eventLoop.exec();
}
void ThreadInformationMessageBox::readyShow(void)
{
    this->moveToThread(QApplication::instance()->thread());
    QTimer::singleShot(0, this, SLOT(onShow()));
}
void ThreadInformationMessageBox::onShow(void)
{
    MyHelper::ShowMessageBoxInfo(m_strMessage);
    emit this->msgBoxhandled();
    this->deleteLater();
}

三、定时任务动态变更设定

注:定时任务在运行期间可以动态变换重新开始计时
在这里插入图片描述注:通过timer类的setInterval方法进行事件重置就可以办到


void CustomTcpSocket::handleChangeIntervalTime(int intervalTime)
{
    if(this->ConnectedState != QTcpSocket::ConnectedState) return;
    this->timer->setInterval(Myapp::secToMillSec(intervalTime));
//    qDebug() << "handleChangeIntervalTime:" << intervalTime;
    emit reciveMsg(QString("对设备: %1,定时轮询时间重置为: %2 秒.").arg(this->devNumber).arg(intervalTime));
}

注:还有一点要说的就是使用消息通知机制 Emit 键字就可以办到
注:在进行设定好新的定时轮询时间后点击保存出发updateData事件
注:使用 emit 发送消息通知给注册的地方 将触发事件的发生

  • 【确定按钮触发】
    在这里插入图片描述
  • 【此处监听定时任务时间的改变】在这里插入图片描述
  • 【此处对改变做出具体内容】
    void CustomTcpServer::changeTimerIntervalTime(int intervalTime)
    {
        if(socketList.size() == 0) return;
        for(int i=0; i<socketList.size(); i++) {
            socketList.at(i)->handleChangeIntervalTime(intervalTime);
        }
    }
    

四、其余内容

注:其余部分基本就是增删改查的操作了。还有界面ui的优化和微调
注:这里对项目的完善还有待继续。其实还是想对项目做进一步重构的
注:希望可以有时间学习到更多的源码程序。
注:在开发中学习C++编程知识,其中就包括下面的内容
描述:C++ Primer 中文版, 以及bilibili上的C++大神的讲课
在这里插入图片描述
bilibili大神的讲课(外国人,但有中文翻译,不过后期中文就跟不上了,还是挺棒的)
在这里插入图片描述

五、题外话

注:年龄越来越大会发现时间就像转瞬即逝的流星。越过越快。最近自己在用【得到】听书。讲解优秀的书籍。用上下班的时间去了解各个方面的人情世故,还是很有意想不到的收获的。真的后悔没早点发现这个东西 说不定能帮你解决些问题(^-----------------------------^)!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/412354.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue 实现页面导出A4标准大小的PDF文件,以及处理图片跨域不能正常展示的问题等

效果预览&#xff1a; 代码流程&#xff1a;首先在utils文件夹下创建htmlToPdf的js工具文件&#xff0c;然后在main.js中注册引用 htmlToPdf.js // 导出页面为PDF格式 import html2Canvas from html2canvas import JsPDF from jspdfexport default {install(Vue, options) {V…

vscode输入英文时字体之间的间隔突然变大,似中文

vscode输入英文时字体之间的间隔突然变大&#xff0c;似中文 主要原因&#xff1a; 是由于输入法变成全角模式了。原因可能是不小心按了 shift空格键快捷键造成的。 正常情况&#xff0c;全角就是字母和数字等与汉字占等宽位置的字。 半角就是ASCII方式的字符&#xff0c;在没…

3、函数定义,函数调用,this指向总结,闭包

一、函数的定义方式 1、函数声明 function demo1() {var num 12var result Math.pow(num,2)//指数函数return result }2、函数表达式 var demo2 function (x,y) { //内置对象arguments前面的两个参数 是 x,yvar sum arguments[0] arguments[1]console.log(sum) }3、构…

stm32用CubeMX库控制OLED显示数字,单个字符,字符串

首先是打开proteus绘制电路图&#xff1a; 接着就是打开CubeMX软件&#xff0c;配置晶振和GPIO口&#xff1a; 接下来就用前面讲过的方法添加一个自己的代码文件夹和代码了&#xff1a; 下面是OLED.c文件&#xff0c;复制就能用&#xff1a; #include "OLED_Font.h"…

如何优化一个看似正常的数据库

通常DBA是不会太了解业务逻辑的&#xff0c;遇到系统中劣质的sql 一般也是以通过添加索引的方式来优化&#xff0c;但是并不是所有的sql都能通过添加索引来优化 这就需要重sql的本身来做分析&#xff0c;另外还要了解什么样的语句会不走索引&#xff01;本文通过几个简单的例子…

再见,Visual Basic——曾经风靡一时的编程语言

2020年3月&#xff0c;微软团队宣布了对Visual Basic&#xff08;VB&#xff09;的“终审判决”&#xff1a;不再进行开发或增加新功能。这意味着曾经风光无限的VB正式退出了历史舞台。 VB是微软推出的首款可视化编程软件&#xff0c;自1991年问世以来&#xff0c;便受到了广大…

不只是数字游戏:六西格玛培训让数据讲述餐厅故事

随着时代的进步和科技的发展&#xff0c;人们对食品安全、健康以及就餐体验的要求日趋增高。这些因素推动了餐饮服务行业不断向前演进&#xff0c;以顺应消费者的多变需求。在2024年&#xff0c;这一行业预计将继续经历创新和变化&#xff0c;其中包括对运营效率的持续改进、对…

状态机-----

1.原理 同步的意思就是状态的跳转都是在时钟的作用下跳转的&#xff0c;有限是指状态机中状态的个数是有限的。两种状态机的共同点都是状态的跳转只和输入有关&#xff0c;区别就是如果最后的输出只和当前状态有关而与输入无关&#xff0c;则是moore型状态机。如果最后的输出不…

VUE基础知识九 ElementUI项目

ElementUI官网 一 项目 最终完成的效果&#xff1a; 切换上边的不同按钮&#xff0c;下方显示不同的表格数据 在src/components下新建不同业务组件的文件夹 1.1 搭建项目 使用脚手架搭建项目后&#xff0c;引入ElementUI&#xff08;搭建、引入ElementUI步骤在第七节里已…

如何让网页APP化 渐进式Web应用(PWA)

前言 大家上网应该发现有的网页说可以安装对应应用&#xff0c;结果这个应用好像就是个web&#xff0c;不像是应用&#xff0c;因为这里采用了PWA相关技术。 PWA&#xff0c;全称为渐进式Web应用&#xff08;Progressive Web Apps&#xff09;&#xff0c;是一种可以提供类似…

索引使用规则1——最左前缀法则

这篇文章主要介绍索引的使用规则——最左前缀法则&#xff0c;关于索引的效率&#xff0c;可以查看上一篇文章索引的有效性 最左前缀法则&#xff1a;索引使用了复合索引&#xff0c;也就是联合索引&#xff0c;使用一个索引名称索引了好几个字段。在这类索引中需要遵守最左前…

华为云是什么

公有云配置 区域&#xff1a; 同一个区域中的云主机是可以互相连通的&#xff0c;不通区域云主机是不能使用内部网络互相通信的 选择离自己比较近的区域&#xff0c;可以减少网络延时卡顿 华为云yum仓库&#xff1a;https://repo.huaweicloud.com/rockylinux/ 首先完成跳板机的…

文件拖放到窗体事件

参考代码 参考链接 拖放文件到窗体_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV13d4y1h7vr/?spm_id_from333.999.0.0&vd_sourcee821a225c7ba4a7b85e5aa6d013ac92e 特此记录 anlog 2024年2月27日

idea 创建打包 android App

1、使用 idea 创建 android 工程 2、 配置构建 sdk 3、配置 gradle a、进入 gradle 官网&#xff0c;选择 install &#xff08;默认是最新版本&#xff09; b、选择包管理安装&#xff0c;手动安装选择下面一个即可 c、安装 sdk 并通过 sdk 安装 gradle 安装 sdk&#xff1a…

【linux进程信号(一)】信号的概念以及产生信号的方式

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; 进程信号 1. 前言2. 信号的基…

MySQL集群 双主架构(配置命令)

CSDN 成就一亿技术人&#xff01; 今天刚开学第一天给大家分享一期&#xff1a;MySQL集群双主的配置需求和命令 CSDN 成就一亿技术人&#xff01; 神秘泣男子主页&#xff1a;作者首页 <———— MySQL专栏 &#xff1a;MySQL数据库专栏<———— MySQL双主是一…

WEB服务器-Tomcat(黑马学习笔记)

简介 服务器概述 服务器硬件 ● 指的也是计算机&#xff0c;只不过服务器要比我们日常使用的计算机大很多。 服务器&#xff0c;也称伺服器。是提供计算服务的设备。由于服务器需要响应服务请求&#xff0c;并进行处理&#xff0c;因此一般来说服务器应具备承担服务并且保障…

C++笔记之执行一个可执行文件时指定动态库所存放的文件夹lib的路径

C++笔记之执行一个可执行文件时指定动态库所存放的文件夹lib的路径 参考博文: 1.C++笔记之执行一个可执行文件时指定动态库所存放的文件夹lib的路径 2.Linux笔记之LD_LIBRARY_PATH详解 3.qt-C++笔记之使用QProcess去执行一个可执行文件时指定动态库所存放的文件夹lib的路径 c…

【wails】(4):使用wails做桌面应用开发,整合chatgpt-web项目做前端,进行本地开发,web端也可以连调,使用websocket实现

1&#xff0c;视频地址 【wails】&#xff08;4&#xff09;&#xff1a;使用wails做桌面应用开发&#xff0c;整合chatgpt-web项目做前端&#xff0c;进行本地开发&#xff0c;web端也可以连调&#xff0c;使用websocket实现 2&#xff0c;演示效果 启动先是报500 错误&#…