firemail

标题: Qt5中connect使用重载的信号函数 [打印本页]

作者: Qter    时间: 2020-3-26 12:03
标题: Qt5中connect使用重载的信号函数
本帖最后由 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/


作者: Qter    时间: 2020-3-26 12:04
  1. connect(this, static_cast<void (ContactTreeView::*)(const QModelIndex&, int)>(&ContactTreeView::signalClicked), this, &ContactTreeView::onClickedHandle);
复制代码





欢迎光临 firemail (http://firemail.wang:8088/) Powered by Discuz! X3