多窗口之间使用信号槽 信号槽连接方式

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

后来发现,是自己信号槽没学好,在这里可以使用自定义的方式。
将button与委托关联,然后委托与主窗口关联。

可以参照博文:
http://blog.csdn.net/lywzgzl/article/details/41085385

我的实现方式:
在 委托中添加了自定义的信号以及槽函数:

signals:
    void sendMessage();

public slots:
    void on_Clicked(bool);

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

connect(button,SIGNAL(clicked(bool)),this,SLOT(on_Clicked(bool)));
void ComboxDelegate::on_Clicked(bool)
{
    emit sendMessage();
}

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

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

在引用的博客链接中时使用的是自动连接命令方式:
void on_<object name>_<signalname>(<signal parameters>)


信号槽的连接方式:
http://www.cnblogs.com/findumars/p/5176419.html

ConstantValueDescription
Qt::AutoConnection0自动连接:默认的方式。信号发出的线程和糟的对象在一个线程的时候相当于:DirectConnection, 如果是在不同线程,则相当于QueuedConnection
Qt::DirectConnection2直接连接:相当于直接调用槽函数,但是当信号发出的线程和槽的对象不再一个线程的时候,则槽函数是在发出的信号中执行的。
Qt::QueuedConnection3队列连接:内部通过postEvent实现的。不是实时调用的,槽函数永远在槽函数对象所在的线程中执行。如果信号参数是引用类型,则会另外复制一份的。线程安全的。
Qt::BlockingQueuedConnection4阻塞连接:此连接方式只能用于信号发出的线程(一般是先好对象的线程) 和 槽函数的对象不再一个线程中才能用。通过信号量+postEvent实现的。不是实时调用的,槽函数永远在槽函数对象所在的线程中执行。但是发出信号后,当前线程会阻塞,等待槽函数执行完毕后才继续执行。
Qt::UniqueConnection0x80防止重复连接。如果当前信号和槽已经连接过了,就不再连接了。

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值