【发布时间】:2018-04-16 11:51:31
【问题描述】:
我即将使我的源代码适应 Qt 中的新信号和插槽语法。虽然以下代码在使用已弃用的 const char* signal 参数时运行良好,但它不适用于新的 QMetaMethod &signal 语法。
class SignalWaiter : public QObject {
Q_OBJECT
public:
SignalWaiter(const QObject* sender, const QMetaMethod &signal);
private slots:
void signalCaught();
};
SignalWaiter::SignalWaiter(const QObject* sender, const QMetaMethod &signal) {
QObject::connect(sender, signal, this, &SignalWaiter::signalCaught);
}
void SignalWaiter::signalCaught() {
}
编译器在connect() 命令处停止并显示以下消息:
错误:C2664:'QMetaObject::Connection QObject::connect(const QObject *,const char *,const char *,Qt::ConnectionType) const':无法将参数 2 从 'const QMetaMethod' 转换为 'const char *'
和
没有可以执行此转换的用户定义转换运算符,或者无法调用该运算符
很明显,编译器尝试使用旧语法调用重载的连接方法。我做错了什么?
【问题讨论】:
-
编译器是对的——
const QMetaMethod &signal不是你假设的函数(信号)指针。 -
@vahancho 嗯?编译器错误说它需要一个
const char*(这也不是一个函数指针) -
从历史上看,Qt 使用了
SIGNAL宏,其评估为const char*
标签: c++ qt signals-slots