我的原始代码将QStringList从信号传递到插槽,然后返回一个QList . 一切正常但我需要将QStringList和QList更改为2个不同的子类QObject . 从那时起,我一直收到像“首先需要的合成方法”这样的错误,或者只是崩溃而没有任何错误信息 .
我知道qt复制了排队连接中传递的所有参数,并且无法复制qobject . 所以我没有返回一个qobject,而是认为我会在发出信号之前创建两个qobjects . 然后我将传递对每个对象的引用,在slot函数中修改其中一个并使返回值无效 . 不幸的是,无论我如何编码信号和插槽功能,应用程序仍会崩溃 . 如何编码信号/插槽函数并将它们连接到两个qobjects作为参数或返回一个qobject?
MyQObject1 obj1("a","b","c");
MyQObject2 obj2();
emit sendSignal(&obj1, &obj2);
// or
MyQObject2 obj2 = emit sendSignal(&obj1);
connect(someObj, SIGNAL(sendSignal(const QObject&)), this, SLOT(receiveSignal(const QObject&)));
receiveSignal()函数不直接创建或修改任何qobject . 它必须首先将qobjects传递给另一个函数,然后修改obj2或创建并返回它 . 任何代码示例将不胜感激 .
1 回答
通常
QObject
由指针传递,而不是通过引用传递(注意QObject
不能复制,不能通过值传递) .QObject*
默认注册为元类型 . 因此,使用QObject*
参数创建信号和插槽足以让它们工作:初始化:
发光:
当然,信号和插槽可以是不同的类别 .