目录
一.QT5信号槽连接方式如下:
- 普通信号
QObject::connect(信号发出者地址,信号发出者函数名称(信号发出者函数参数...),
信号接收者地址,信号接收者槽函数名称(信号接收者槽函数参数...));
注意:若在QObject子类内部定义信号槽,则可直接调用connect函数。
- 采用qOverLoad重载的信号
QObject::connect(信号发出者地址,qOverLoad<信号重载函数参数...>::of(&类型:: 信号),
信号接收者地址,信号接收者槽函数名称(信号接收者槽函数参数...));
二. 应用
由于类里面会存在多个同名但不同参数的signal方法,于是要用QOverload<参数1类型,参数2类型,...>::of(&同名的方法名)的方式来引用具体的那个方法(信号)。
示例1
connect(buttonGroup,QOverload<int>::of(&QButtonGroup::buttonClicked),
this,&MainWindow::buttonGroupClicked);
解析:
返回一个形参是(int)、名字是buttonClicked的函数指针。当有多个重载函数时,可以利用QOverload获取指定的那个重载函数,多用于信号槽连接。
因为有两个命名都为QButtonGroup::buttonClicked的信号,仅信号的形参不一样,所以连接信号槽的时候要明确指定是其中的哪一个。这里QOverload便是用来指定使用形参为int的那个buttonClicked信号。
示例2
connect(ui.comboBox_locateType, QOverload<int>::of(&QComboBox::activated), this, &Matching::slot_cmbChanged);
解析:
activated这个信号类似于currentIndex的改变,但是只有当组合框的索引被用户改变时才会发出,而不是当以编程方式设置时。
如上图所示,第二个参数需要一个信号(函数)的指针,但是QComboBox::activated实际上有两个重载函数"void activated(const QString &text)"与"void activated(int index)",而由于上述形式无形参列表,无法确定返回哪个信号的指针。
此时利用QOverLoad通过指定形参列表,来确定返回哪个信号的指针。 所以使用QOverload<int>::of可以指定形参为 int 的 “activated”信号。