如何克隆QObject的连接?

时间:2015-12-11 05:27:42

标签: c++ qt

我有一些像这样的代码。

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类的赋值运算符,但我找不到有关克隆现有连接的任何信息。

0 个答案:

没有答案