Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1137|回复: 1
打印 上一主题 下一主题

Qt5中connect使用重载的信号函数

[复制链接]

1228

主题

1998

帖子

7598

积分

认证用户组

Rank: 5Rank: 5

积分
7598
跳转到指定楼层
楼主
发表于 2020-3-26 12:03:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Qter 于 2020-3-26 12:04 编辑

Qt5中的信号槽连接一般这样使用:
1
2
3
4
5
6
7
//mainwindow.h
public slots:
  void ValueChange(int value);

//mainwindow.cpp
auto spinbox = new QSpinBox;
connect(spinbox, &QSpinBox::valueChange, this, &mainwindow::ValueChange);

但是,对于信号函数有重载的话,程序将无法编译通过,原因就是编译器无法确定是使用哪个信号函数,所以,我们需要显式的声明我们使用的信号函数类型
  • 使用static_cast
    1
    connect(spinbox, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChange), this, &mainwindow::ValueChange);
  • c++14中使用qOverload
    qOverload需要在Qt5.7后的版本才可以使用,并且需要c++14
    1
    connect(spinbox, qOverload<int>(&QSpinBox::valueChange), this, &mainwindow::ValueChange);
  • c++11中使用QOverload
    在c++11则可以这么写
    1. connect(spinbox,  QOverload<int>::of(&QSpinBox::valueChange), this, &mainwindow::ValueChange);
    复制代码

https://yangliuhui.github.io/2018/04/14/Qt5%E4%B8%ADconnect%E4%BD%BF%E7%94%A8%E9%87%8D%E8%BD%BD%E7%9A%84%E4%BF%A1%E5%8F%B7%E5%87%BD%E6%95%B0/

回复

使用道具 举报

1228

主题

1998

帖子

7598

积分

认证用户组

Rank: 5Rank: 5

积分
7598
沙发
 楼主| 发表于 2020-3-26 12:04:08 | 只看该作者
  1. connect(this, static_cast<void (ContactTreeView::*)(const QModelIndex&, int)>(&ContactTreeView::signalClicked), this, &ContactTreeView::onClickedHandle);
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-5-20 04:19 , Processed in 0.056226 second(s), 19 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表