gpt4 book ai didi

c++ - 将指向成员函数的指针作为返回值传递给 QObject::connect()

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:33:46 24 4
gpt4 key购买 nike

出于设计原因,我需要想出一种方法来调用 QObject::connect(),其中函数指针作为函数调用的返回值传入。即,不是使用原始语法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() );

我在这里做错了什么?

最佳答案

您的函数不返回成员函数指针。 SENDER 应该这样写:

class SENDER : public QObject {

Q_OBJECT
public:
void (SENDER::*get_func())(double, double);

signals:
void send_data(double x, double y);

};


void (SENDER::*SENDER::get_func())(double, double)
{
return &SENDER::send_data;
}

get_func() 需要声明为返回一个指针,该指针指向采用(double, double) 并返回void 的成员函数。实现需要限定要返回的成员的名称,并使用地址运算符 &

必须对 RECEIVER 进行类似的更改:

class RECEIVER : public QObject {

Q_OBJECT
public:
void receive_data(double x, double y);
void (RECEIVER::*get_func())(double, double);
};

void (RECEIVER::*RECEIVER::get_func())(double, double)
{
return &RECEIVER::receive_data;
}

关于c++ - 将指向成员函数的指针作为返回值传递给 QObject::connect(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53389491/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com