qt 信号多个链接槽_多窗口之间使用信号槽 信号槽连接方式

本文介绍了如何在Qt中使用自定义信号槽机制实现在委托中的button点击后,与主窗口进行通信。通过在委托中添加信号和槽函数,以及在主窗口中进行正确连接,成功实现了跨组件的事件传递。同时,文章还提到了Qt的信号槽连接方式,包括DirectConnection、QueuedConnection等,以及防止重复连接的UniqueConnection选项。
摘要由CSDN通过智能技术生成

今天在 tablewidget中写了个委托。

想实现 点击委托中的editor(一个button),在主窗口能够显示菜单。 一开始就想到了信号槽机制,但是问题在于 button 是 委托中的,没法直接与主窗口进行connect。

后来发现,是自己信号槽没学好,在这里可以使用自定义的方式。

将button与委托关联,然后委托与主窗口关联。

我的实现方式:

在 委托中添加了自定义的信号以及槽函数:

signals:

void sendMessage();

public slots:

void on_Clicked(bool);

1

2

3

4

5

然后将button的clicked信号与槽函数关联,在槽函数中发送信号。

connect(button,SIGNAL(clicked(bool)),this,SLOT(on_Clicked(bool)));

1

void ComboxDelegate::on_Clicked(bool)

{

emit sendMessage();

}

1

2

3

4

最后就是在主窗口中将委托与之关联:

connect(comboxDelegate,SIGNAL(sendMessage()),this,SLOT(on_Click()));

1

在引用的博客链接中时使用的是自动连接命令方式:

void on__()

Constant

Value

Description

Qt::AutoConnection

0

自动连接:默认的方式。信号发出的线程和糟的对象在一个线程的时候相当于:DirectConnection, 如果是在不同线程,则相当于QueuedConnection

Qt::DirectConnection

2

直接连接:相当于直接调用槽函数,但是当信号发出的线程和槽的对象不再一个线程的时候,则槽函数是在发出的信号中执行的。

Qt::QueuedConnection

3

队列连接:内部通过postEvent实现的。不是实时调用的,槽函数永远在槽函数对象所在的线程中执行。如果信号参数是引用类型,则会另外复制一份的。线程安全的。

Qt::BlockingQueuedConnection

4

阻塞连接:此连接方式只能用于信号发出的线程(一般是先好对象的线程) 和 槽函数的对象不再一个线程中才能用。通过信号量+postEvent实现的。不是实时调用的,槽函数永远在槽函数对象所在的线程中执行。但是发出信号后,当前线程会阻塞,等待槽函数执行完毕后才继续执行。

Qt::UniqueConnection

0x80

防止重复连接。如果当前信号和槽已经连接过了,就不再连接了。

其中UniqueConnection只能算是一个防止重复连接的参数,并不算是一种连接方式;而AutoConnection做为默认的方式,会选择DirectConnection或者QueuedConnection

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值