所以我有一个程序,它使用QMainWindow的子类作为QMdiArea小部件。我只是这样做,因为QDockWidgets只能在QMainWindow中使用(我的子类需要dock小部件)。
为了节省目的,我正在测试我的类的序列化,而且我的指针不正确。这是代码
if (ui->mdiMain->subWindowList().length() > 0)
{
QString path = QFileDialog::getSaveFileName(this, "Save Build Order", "" ,"*.cbo");
if (path > 0)
{
QFile file(path, this);
if (file.open(QFile::WriteOnly) == true)
{
QWidget* widget = reinterpret_cast<QWidget*>(ui->mdiMain->activeSubWindow());
WidgetBuildOrder* widgetBuildOrder = reinterpret_cast<WidgetBuildOrder*>(widget);
QDataStream stream(&file);
stream << widgetBuildOrder;
file.close();
ui->statusBar->showMessage("Save Successful.", 5000);
}
}
}
}
WidgetBuildOrder是MainWindow的子类。
所以我的想法是我可以继续指向它实际上是什么。当我创建MDI区域时,我传递了一个新的WidgetBuildOrder。有没有办法做到这一点?
要澄清,在演员之后我会得到一个指针,它只是指向垃圾。不是WidgetBuildOrder中设置的值我实际上已打开。
任何帮助将不胜感激,
谢谢,
JEC
答案 0 :(得分:1)
QMdiArea::activeSubWindow
会返回QMdiSubWindow*
,如果QMdiArea
没有焦点,则返回0。
由于您不可能拥有一个继承自QMainWindow
和QMdiSubWindow
的类,您想要的是在当前子窗口中获取小部件:< / p>
QMdiSubWindow *subWindow = ui->mdiMain->currentSubWindow();
WidgetBuildOrder* widgetBuildOrder =
static_cast<WidgetBuildOrder*>(subwindow->widget());
答案 1 :(得分:0)
您是否尝试过不给WidgetBuildOrder指针指向QWidget但使用activatedSubWindow来获取正确的对象?
类似的东西:
//QWidget* widget = reinterpret_cast<QWidget*>(ui->mdiMain->activeSubWindow());
WidgetBuildOrder* widgetBuildOrder = reinterpret_cast<WidgetBuildOrder*>(ui->mdiMain->activeSubWindow());