首页| 论坛| 消息

回复: 请问关于qt控件管理的问题
#6 回 iceroad 的帖子 [lihybn 07-31 10:46]
iceroad:逐层封装 是必须的,
至于消息传递,用3楼的方法,用 单例 进行消息中转
也可以用Qt的事件投递
 (2018-07-31 09:42) 
大神,用 单例 进行消息中转 能不能麻烦说的详细一点,听不太明白
#7 [iceroad 07-31 10:57]
要不就用事件传递吧,给你个链接
https://blog.csdn.net/Amnes1a/article/details/64906910
#8 [iceroad 07-31 11:00]
单例传递 类似于实现一个系统托盘菜单的东西 ,这个东西是全局的。 所有的消息都通过他来中转,
A------>通知系统托盘菜单,
系统托盘菜单通知 ------->B
不如直接使用 Qt事件投递 简单
#9 回 iceroad 的帖子 [lihybn 07-31 11:17]
iceroad:单例传递 类似于实现一个  系统托盘菜单的东西 ,这个东西是全局的。 所有的消息都通过他来中转,
A------>通知系统托盘菜单,
系统托盘菜单通知 ------->B
不如直接使用 Qt事件投递 简单 (2018-07-31 11:00) 
好的,太感谢你了,我研究研究,我这项目还没开始,预感到会出现这个尴尬的问题,又想不明白怎么解决,就过来问了一下
#10 [fu22507411 08-04 03:02]
如果不需要跨进程间通信的话,我推荐用通知中心
class NoticeCenter:public QObject
{
static NoticeCenter::getInstance();
...
signals:
void mysignal(QString);
};
cpp:
NoticeCenter*NoticeCenter::getInstance()
{
static NoticeCenter * g_instance = NULL;
//如果这个通知类会被不同的线程调用最好上锁
if(g_instance == NULL)
{
g_instance= new NoticeCenter ();
}
return g_instance;
}
在A控件类中发信号
NoticeCenter::getInstance()->mysignal("A_var");//这个用法Qt4可能不支持
在B控件类中接收
B
{
connect(NoticeCenter::getInstance(),SIGNAL(QString),this,SLOT(bSlotFun(QString)));
}
void B:bSlotFun(QString var)
{
var;//var="A_var"
}

<< 1 2 3 4 >> (2/5)

回复 发表
主题 版块