QT学习——信号与槽机制

来源:互联网 发布:叶萝莉娃娃淘宝 编辑:程序博客网 时间:2024/05/29 16:41

信号槽是Qt中特有的概念。它使得我们可以将不同的object绑定起来,而object对象间并不需要对相互了解。 Slots也是普通的c++方法,它们可以是virtual;可以被重载;可以使private、protected、public,可以像其它c++方法一样有各种类型的参数。它们唯一的区别就是signal与slot是相互链接起来的,slot函数在每次signal函数被emit时会被调用。

标准的connect函数如下:
connect(sender, SIGNAL(signal), receiver, SLOT(slot))
这里在写代码的时候要特别注意,别漏掉括号什么的,细心点;sender、receiver可以是同一个object,不同控件,不同类之间

sender和receiver是QObject对象的指针,signal和slot函数是不带参数的函数名,实际上SIGNAL()和SLOT()宏将他们的参数(signal和slot函数)转换成相应的字符串。 所以对于通过控件生成的信号,我们注意不要使用SIGNAL(ui.pushButton->clicked()),这样是错误的,对于按钮控件,识别它的clicked()信号而非ui.pushButton->clicked()这个操作。当然如果是自己提交的除外。

通过以下实例,我们可以看到信号槽的具体使用情况:

信号和槽函数必须有着相同的参数类型,这样信号和槽函数才能成功连接
(1)设置一次从多个控件中获取提交的数据,可以通过自己定义signal函数通过 emit来进行提交;
下面以从三个下拉控件中提交当前选定的下拉列表索引为例:
emit signSetSel(ui.comboBox->currentIndex(),ui.comboBox_con->currentIndex(),ui.comboBox_mode->currentIndex());

友元声明不能位于信号或者槽声明区内。相反,它们应该在普通C++的private、protected或者public区内进行声明。下面的例子是不合语法规范的:

0 0
原创粉丝点击