【问题标题】:iterate through mdiarea subwindows遍历 mdiarea 子窗口
【发布时间】:2013-05-23 14:17:07
【问题描述】:

我有一个 mdiArea。每次打开图像时,我都会向此 mdiArea 添加子窗口。我为每个子窗口设置的小部件是继承自 QDialog 的 imageFileDialog。在这个对话框中,我有一个旋转框。我希望能够在创建 mdiArea 后为我在 mdiArea 中的每个对话框设置此旋转框的值。我不知道如何遍历对话框。我试着想办法做到这一点。

for (int j=0; j < ui->mdiArea->subWindowList().size(); j++)
{
    imageFileDialog *ifd = ui->mdiArea->subWindowList()[j]->widget();
    ifd->setSpinBox(0);
}

但我有一个错误,因为我无法将小部件转换为从 QDialog 继承的 imageFileDialog 类。

虽然我可以在创建 imageFileDialog 时设置连接:

imageFileDialog *ifd = new imageFileDialog();
ifd->connect(this, SIGNAL(emitImageFileValue(double)), SLOT(ifd->setSpinBox(double)));
subWindow1->setWidget(ifd);

但这不同于我之前尝试建立的任何连接。一切都编译得很好,但是发出的信号没有到达我的插槽。我希望有人以前尝试过这个并有一些建议!提前致谢。

【问题讨论】:

    标签: qt qdialog qmdiarea


    【解决方案1】:

    对第一个问题使用qobject_cast,对于第二个问题,您只需将插槽名称传递给 SLOT() 宏(不带 ifd->) ,或将 ifd 指针作为单独的参数传递给连接,例如:

    QObject::connect(this, SIGNAL(emitImageFileValue(double)), idf, SLOT(setSpinBox(double)));
    

    【讨论】:

    • 谢谢!对我来说这是一个简单的改变,它就像一个魅力。我最终更改了连接,并决定不遍历子窗口。
    猜你喜欢
    • 2021-07-28
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 2011-10-23
    相关资源
    最近更新 更多