не может привести QMainWindow из QMdiSubWindow - PullRequest
0 голосов
/ 09 сентября 2011

Итак, у меня есть программа, которая использует подкласс QMainWindow для виджетов QMdiArea.Я делаю это только потому, что QDockWidgets можно использовать только в QMainWindow (а моему подклассу нужны виджеты для док-станции).

Я тестировал сериализацию моего класса в целях сохранения, и мой указатель был неверным.Вот код

    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

Ответы [ 2 ]

1 голос
/ 09 сентября 2011

QMdiArea::activeSubWindow возвращает QMdiSubWindow* или 0, если QMdiArea не имеет фокуса.

Поскольку вы не можете иметь класс, который наследует от QMainWindow и QMdiSubWindow, вам нужно получить виджет внутри подокна current :

QMdiSubWindow *subWindow = ui->mdiMain->currentSubWindow();
WidgetBuildOrder* widgetBuildOrder = 
    static_cast<WidgetBuildOrder*>(subwindow->widget());
0 голосов
/ 09 сентября 2011

Вы пытались не дать указателю WidgetBuildOrder указатель на QWidget, но activSubWindow, чтобы получить правильный объект обратно?

Что-то вроде:

//QWidget* widget = reinterpret_cast<QWidget*>(ui->mdiMain->activeSubWindow());
WidgetBuildOrder* widgetBuildOrder = reinterpret_cast<WidgetBuildOrder*>(ui->mdiMain->activeSubWindow());
...