迭代mdiarea子窗口

时间:2013-05-23 14:17:08

标签: qt qdialog qmdiarea

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

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);

但这与我之前尝试过的任何连接不同。一切都很好,但发出的信号并没有到达我的位置。我希望有人之前尝试过这个并提出一些建议!提前谢谢。

1 个答案:

答案 0 :(得分:1)

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

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