Qt子窗口部件提升为类后,该类的多个子窗口如何接收父窗口的信号
时间: 2023-07-19 11:06:46 浏览: 137
qt--主窗口中按钮弹出子窗口,并把主窗口信号发送给子窗口
5星 · 资源好评率100%
如果你想让一个类中的多个子窗口接收父窗口的信号,可以在该类中创建一个槽函数,然后将父窗口的信号连接到该槽函数。在槽函数中,你可以遍历该类中的所有子窗口,并且手动调用每个子窗口的槽函数。
下面是一个示例代码:
```cpp
class MyWidget : public QWidget {
Q_OBJECT
public:
explicit MyWidget(QWidget *parent = nullptr);
private slots:
void onParentSignalReceived();
private:
QList<QWidget*> childWidgets;
};
MyWidget::MyWidget(QWidget *parent) : QWidget(parent)
{
// 创建多个子窗口
for (int i = 0; i < 5; ++i) {
QWidget *childWidget = new QWidget(this);
childWidgets.append(childWidget);
}
// 连接父窗口的信号到槽函数
connect(parent, SIGNAL(parentSignal()), this, SLOT(onParentSignalReceived()));
}
void MyWidget::onParentSignalReceived()
{
// 遍历所有子窗口,并且手动调用每个子窗口的槽函数
foreach (QWidget *childWidget, childWidgets) {
QMetaObject::invokeMethod(childWidget, "onParentSignalReceived", Qt::DirectConnection);
}
}
```
在上面的代码中,我们首先在 `MyWidget` 类的构造函数中创建了多个子窗口,并且将它们添加到 `childWidgets` 列表中。然后,我们在构造函数中连接了父窗口的信号到 `onParentSignalReceived` 槽函数。在槽函数中,我们遍历了 `childWidgets` 列表,并且手动调用了每个子窗口的 `onParentSignalReceived` 槽函数。这样,每个子窗口都能接收到父窗口的信号。
阅读全文