【发布时间】:2019-04-22 16:33:32
【问题描述】:
出于设计原因,我需要想出一种调用QObject::connect() 的方法,其中函数指针作为函数调用的返回值传入。也就是说,我必须执行以下操作,而不是使用 vanilla 语法connect(sender, &Sender::valueChanged, receiver, &Receiver::updateValue);:
//in main.cpp
SENDER *sender = new SENDER;
RECEIVER *receiver = new RECEIVER;
connect(sender, sender->get_func(), receiver, receiver->get_func() );
其中 SENDER 和 RECEIVER 定义如下:
#include <QObject>
class SENDER : public QObject {
Q_OBJECT
public:
void(* get_func() ) (double, double);
signals:
void send_data(double x, double y);
};
void (* SENDER::get_func() )(double, double)
{
return send_data;
}
class RECEIVER : public QObject {
Q_OBJECT
public:
void receive_data(double x, double y);
void(* get_func() ) (double, double);
};
void (* RECEIVER::get_func() )(double, double)
{
return receive_data;
}
int main()
{
SENDER *sender = new SENDER;
RECEIVER *receiver = new RECEIVER;
QObject::connect(sender, sender->get_func(), receiver, receiver->get_func() );
}
尝试编译给我以下错误:
/home/abc/work/mainwindow.cpp:41: error: no matching function for call to ‘MainWindow::connect(SENDER*&, void (*)(double, double), RECEIVER*&, void (*)(double, double))’
connect(sender, sender->get_func(), receiver, receiver->get_func() );
我在这里做错了什么?
【问题讨论】:
-
我冒昧地将您的代码转换为minimal reproducible example,以便我们都可以重现该问题。