如何遍历 QMdiArea 中的小部件

How to iterate correct through the widgets in a QMdiArea?

本文关键字:小部 QMdiArea 何遍历 遍历      更新时间:2023-10-16

我在弄清楚如何迭代我添加到 QMdiArea 的小部件时遇到了一些问题。当我将 QWidget 添加到 QMdiArea 然后使用以下代码进行迭代时,我的小部件得到了两个不同的指针,其中迭代时的指针不正确:

    QWidget* w1 = new QWidget();
    QWidget* w2 = new QWidget();
    qDebug() << w1;
    qDebug() << w2;
    QMdiArea* mdi = new QMdiArea();
    mdi->addSubWindow(w1);
    mdi->addSubWindow(w2);
    foreach(QWidget* widget, mdi->subWindowList()) {
        qDebug() << widget;
    }

示例输出:

QWidget(0x21f0610)
QWidget(0x21f0680)
QMdiSubWindow(0x21f07d0)
QMdiSubWindow(0x2195420)

如何从 MdiArea 获得正确的指针?谢谢!

Marc Ströbel是对的:以下代码提供了正确的指针。我不知道 QMdiArea 创建了一个 QMdiSubWindow 并包装了我的小部件:

QWidget* w1 = new QWidget();
QWidget* w2 = new QWidget();
qDebug() << w1;
qDebug() << w2;
QMdiArea* mdi = new QMdiArea();
mdi->addSubWindow(w1);
mdi->addSubWindow(w2);
foreach(QMdiSubWindow* sub, mdi->subWindowList()) {
    qDebug() << sub;
    qDebug() << sub->widget();
}

示例输出:

QWidget(0x21c0610)
QWidget(0x21c0680)
QMdiSubWindow(0x21c07d0)
QWidget(0x21c0610)
QMdiSubWindow(0x2165420)
QWidget(0x21c0680)