qml connection不同类也可以收到怎么解决
时间: 2023-12-08 16:03:45 浏览: 79
在 Qt 中,可以使用 `QObject::connect` 函数来连接不同类的信号与槽。要让不同类之间的信号和槽能够正常连接,需要满足以下几点:
1. 信号和槽的参数类型必须匹配,或者可以自动转换。
2. 信号和槽的访问权限必须是 `public`。
3. 信号必须声明在该类的 `signals` 块中。
4. 槽必须声明在该类的 `public slots` 块中。
下面是一个示例:
```cpp
class Sender : public QObject
{
Q_OBJECT
public:
explicit Sender(QObject *parent = nullptr) : QObject(parent) {}
signals:
void signal1(int value);
};
class Receiver : public QObject
{
Q_OBJECT
public:
explicit Receiver(QObject *parent = nullptr) : QObject(parent) {}
public slots:
void slot1(int value)
{
qDebug() << "Received signal with value:" << value;
}
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Sender sender;
Receiver receiver;
QObject::connect(&sender, &Sender::signal1, &receiver, &Receiver::slot1);
emit sender.signal1(42);
return a.exec();
}
```
在上面的示例中,`Sender` 类和 `Receiver` 类是两个不同的类,它们之间通过 `QObject::connect` 函数连接了信号和槽。当 `sender` 对象发出 `signal1` 信号时,`receiver` 对象的 `slot1` 槽会被调用,并输出接收到的参数值。
阅读全文