【QT】QOverload 信号槽连接方式用法示例

【QT】QOverload 信号槽连接方式用法示例,第1张

目录

一.QT5信号槽连接方式如下:

二. 应用

示例1

示例2


一.QT5信号槽连接方式如下:
  • 普通信号 

     

QObject::connect(信号发出者地址,信号发出者函数名称(信号发出者函数参数...),
         信号接收者地址,信号接收者槽函数名称(信号接收者槽函数参数...));


注意:若在QObject子类内部定义信号槽,则可直接调用connect函数。


  • 采用qOverLoad重载的信号

     

QObject::connect(信号发出者地址,qOverLoad<信号重载函数参数...>::of(&类型:: 信号),
                 信号接收者地址,信号接收者槽函数名称(信号接收者槽函数参数...));
二. 应用

       由于类里面会存在多个同名但不同参数的signal方法,于是要用QOverload<参数1类型,参数2类型,...>::of(&同名的方法名)的方式来引用具体的那个方法(信号)。


示例1

connect(buttonGroup,QOverload::of(&QButtonGroup::buttonClicked),
        this,&MainWindow::buttonGroupClicked);

解析:

      返回一个形参是(int)、名字是buttonClicked的函数指针。


当有多个重载函数时,可以利用QOverload获取指定的那个重载函数,多用于信号槽连接。


      因为有两个命名都为QButtonGroup::buttonClicked的信号,仅信号的形参不一样,所以连接信号槽的时候要明确指定是其中的哪一个。


这里QOverload便是用来指定使用形参为int的那个buttonClicked信号。


示例2
connect(ui.comboBox_locateType, QOverload::of(&QComboBox::activated), this, &Matching::slot_cmbChanged);

解析:

         activated这个信号类似于currentIndex的改变,但是只有当组合框的索引被用户改变时才会发出,而不是当以编程方式设置时。


        如上图所示,第二个参数需要一个信号(函数)的指针,但是QComboBox::activated实际上有两个重载函数"void activated(const QString &text)""void activated(int index)",而由于上述形式无形参列表,无法确定返回哪个信号的指针。


        此时利用QOverLoad通过指定形参列表,来确定返回哪个信号的指针。


 所以使用QOverload::of可以指定形参为 int 的 “activated”信号。



 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/562757.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-02
下一篇 2022-04-02

发表评论

登录后才能评论

评论列表(0条)

保存