【问题标题】:How to iterate correct through the widgets in a QMdiArea?如何正确遍历 QMdiArea 中的小部件?
【发布时间】:2018-12-21 16:25:09
【问题描述】:

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

【问题讨论】:

  • 什么是“正确的指针”?为什么你的结果不正确?
  • @vahancho,我想要 QWidget 的指针,而不是 QMdiSubWindow 的指针
  • 您确定您的代码吗?这个foreach (QWidget* widget, mdi-&gt;subWindowList()) 甚至不能为我编译。它应该是foreach(QMdiSubWindow* widget, mdi-&gt;subWindowList())
  • 看起来小部件被包裹在一个 QMdiSubWindow 中,你试过foreach(QMdiSubWindow* sub, mdi-&gt;subWindowList()) { qDebug() &lt;&lt; sub-&gt;widget(); }
  • @vahancho 它在 Windows 7 上使用 Qt5.9.1 和 Visual c++ 为我编译

标签: c++ qt


【解决方案1】:

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)

【讨论】:

    猜你喜欢
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    • 2022-12-01
    • 1970-01-01
    • 2017-12-12
    相关资源
    最近更新 更多