【问题标题】:qt5: connect overload signal and slot function with static_castqt5:用 static_cast 连接重载信号和槽函数
【发布时间】:2016-05-30 13:11:23
【问题描述】:

我的环境:Qt5.5 + QtCreator3.5 + OSX10.11

我知道qt5和qt4中connect函数的语法不同,查阅文档了解如何使用qt5中的connect()来处理重载信号/槽函数。

我按照建议做了,但还是不行。

newspaper.h

signals:
    // overload function
    void newPaper(const QString &name) const;
    void newPaper(const QString &name, const QDate &date) const;

reader.h

//overload function
void receiveNewspaper(const QString &name) const
{
    qDebug() << "overload(name): Receives Newspaper: " << name;
}
//overload function
void receiveNewspaper(const QString &name, const QDate &date) const
{
    qDebug() << "overload(name, date): Receives Newspaper: " << name << "\tDate:" << date;
}

ma​​in.cpp

//connect for overload signal,slot function
QObject::connect(&newspaper,
                 static_cast<void (Newspaper:: *)(const QString &)>(&Newspaper::newPaper),
                 &reader,
                 static_cast<void (Reader:: *)(const QString &)>(&Reader::receiveNewspaper) );

但是报错如下

./2_16_SignalSlotDeep/main.cpp:16:22: error: address of overloaded function 'newPaper' cannot be static_cast to type 'void (Newspaper::*)(const QString &)'
                     static_cast<void (Newspaper::*)(const QString &)>(&Newspaper::newPaper),
                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../2_16_SignalSlotDeep/newspaper.h:28:10: note: candidate function
    void newPaper(const QString &name) const;
         ^
../2_16_SignalSlotDeep/newspaper.h:29:10: note: candidate function
    void newPaper(const QString &name, const QDate &date) const;
         ^
../2_16_SignalSlotDeep/main.cpp:18:22: error: address of overloaded function 'receiveNewspaper' cannot be static_cast to type 'void (Reader::*)(const QString &)'
                     static_cast<void (Reader::*)(const QString &)>(&Reader::receiveNewspaper) );
                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../2_16_SignalSlotDeep/reader.h:16:10: note: candidate function
    void receiveNewspaper(const QString &name) const
         ^
../2_16_SignalSlotDeep/reader.h:21:10: note: candidate function
    void receiveNewspaper(const QString &name, const QDate &date) const

我已经搜索了其他对我没有帮助的问题。如何解决?您的建议将不胜感激。

other question link1

other question link2

【问题讨论】:

标签: qt5 connect signals-slots overloading static-cast


【解决方案1】:

您不能使用 static_cast 丢弃信号的“常量”。尝试删除信号后面的“const”。

通常信号不需要是 const,因为它们通常在非常量方法中发出。

【讨论】:

  • 删除信号/插槽重载方法后面的“const”后,它工作正常。感谢您的帮助。
猜你喜欢
  • 2015-09-18
  • 1970-01-01
  • 2013-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-23
相关资源
最近更新 更多