当前位置:网站首页>qt 复杂界面信号槽设计
qt 复杂界面信号槽设计
2022-08-04 15:18:00 【蜉蝣之翼*】
场景:
- 界面比较复杂:有一个总的控制界面,有很多子界面,子界面套子界面。
- 业务逻辑也很复杂,需要很多专门处理业务的类,有一些费时的操作需要放到线程里。
这个时候按照传统的方式写信号槽就很痛苦。qt 子窗口向父窗口发送信息
比如,曾孙界面需要传消息给控制界面,就得一层一层往上传。太麻烦了。
还有子界面和业务线程以及总控制界面的交互
解决办法如下:
- 定义一个负责传递信号的类,设置为单例模式
Signals.h
#include "Singletion.h"//单例模式头文件
#define INST_Signals Signals::Instance()
class Signals : public QObject
{
Q_OBJECT
PATTERN_SINGLETON_DECLARE(Signals)//单例模式的申明
public:
Signals();
~Signals();
// 发送指定信号
void SendSignal1(QString);
void SendSignal2(QString);
signals:
void signal1(QString);
void signal2(QString);
}
void Signals::SendSignal1(QString)
{
emit signal1("signal1");
}
void Signals::SendSignal2(QString)
{
emit signal1("signal2");
}
其中单例模式设置方法: C++ 单例模式
- 给传递信号的类发送信号
原本是 界面1给界面2发消息,现在是 界面1 给 Signals 发消息,Signals 给界面2发消息
(貌似是代理模式)
界面1.cpp
#include "Signals.h"
//构造函数里面
connect(this, SIGNAL(sendSignal1towidget2(QString)), INST_CSignals, SLOT(SendSignal1( QString)));
界面2.cpp
#include "Signals.h"
//构造函数里面
connect(INST_CSignals, SIGNAL(signal1( QString)), this, SLOT(getsignal1( QString)));
这样的好处是,每次发送界面只管发送,接受界面只管接受,Signals 负责传递
再也不用管 父父子子复杂结构,还有一个信号多个地方接受处理了
边栏推荐
猜你喜欢

QT笔记——QUuid了解

24、shell编程-流程控制

实战:10 种实现延迟任务的方法,附代码!

你以为在做的是微服务?不!你做的只是分布式单体!

Flutter 运动鞋商铺小demo

《分布式云最佳实践》分论坛,8月11日深圳见

16、学习MySQL 正则表达式

Compound Refractive Lenses for X-ray Focusing
小程序|炎炎夏日、清爽一夏、头像大换装

Bluetooth Technology|In the first half of the year, 1.3 million charging piles were added nationwide, and Bluetooth charging piles will become the mainstream of the market
随机推荐
This week to discuss the user experience: Daedalus Nemo to join Ambire, explore the encryption of the ocean
Unity AR阴影投射透明地面 仅渲染模型实时阴影 Shader实现
Zheng Qing freshmen school competition and middle-aged engineering selection competition
C# 判断文件编码
JCMsuite Application: Oblique Plane Wave Propagation Transmission Through Aperture
Compound Refractive Lenses for X-ray Focusing
输入输出流总结
Semaphore 基本原理
I love Tanabata hahaha
李沐的深度学习笔记来了!
2022年7月国产数据库大事记-墨天轮
leetcode:212. 单词搜索 II
16、学习MySQL 正则表达式
普法教育结合VR全景,直观感受和学习法治精神
(2022杭电多校五)C - Slipper (dijkstra+虚拟结点)
你以为在做的是微服务?不!你做的只是分布式单体!
IP报文头解析
leetcode:255 验证前序遍历序列二叉搜索树
vim common operation commands
基本介绍PLSQL