我有一些像这样的代码。
class CallFunction : public QObject
{
Q_OBJECT
signals:
void call(MyVariant& result);
public:
CallFunction() {}
MyVariant eval()
{
MyVariant result;
emit call(result);
return result;
}
};
class Block : public QObject
{
Q_OBJECT
public slots:
void run(MyVariant& result)
{
//something actions changing result
}
};
int main()
{
CallFunction* callFunction = new CallFunction();
Block* block = new Block();
QObject::connect(callFunction,SIGNAL(call(MyVariant&)),block,
SLOT(run(MyVariant&)));
callFunction->eval(); //here it's ok. Block::run() is called
CallFunction* callFunction2 = new CallFunction();
*callFunction2 = *callFunction;
callFunction2->eval(); // Here's problem. Block::run doesn't run!
}
有两个班级。第一个表示调用某个函数的对象。第二个直接运行该函数并返回结果。 我们需要将信号CallFunction :: call()连接到插槽Block :: run()以实现这一点。首先一切正常。但是如果我们克隆一个CallFunction对象,连接就会消失。调用克隆对象的CallFunction :: eval()没有任何影响。我想我需要重载CallFunction类的赋值运算符,但我找不到有关克隆现有连接的任何信息。