目录
一、需要时间去磨练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大神的讲课(外国人,但有中文翻译,不过后期中文就跟不上了,还是挺棒的)
五、题外话
注:年龄越来越大会发现时间就像转瞬即逝的流星。越过越快。最近自己在用【得到】听书。讲解优秀的书籍。用上下班的时间去了解各个方面的人情世故,还是很有意想不到的收获的。真的后悔没早点发现这个东西
说不定能帮你解决些问题(^-----------------------------^)!