如何在QMdiArea中的小部件上迭代正确?

时间:2018-12-21 07:40:54

标签: c++ qt

我在弄清楚如何迭代添加到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获取正确的指针?谢谢!

1 个答案:

答案 0 :(得分:0)

马克·斯特罗贝尔(MarcStrö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)