Не удается отобразить модальный QProgressDialog в приложении MFC - PullRequest
1 голос
/ 22 декабря 2010

У меня проблемы с отображением модального диалогового окна Qt при запуске приложения Qt из приложения MFC.В частности, экземпляр QProgressDialog не будет отображаться в приложении MFC, когда я установил для его родителя экземпляр QWinWidget.Вот моя проблема более подробно ...

Мое приложение MFC должно передать много данных в приложение Qt, которое является DLL.Приложение Qt включает в свой класс класс ProgressDlg, который за кулисами реализуется с использованием QProgressDialog.Это диалоговое окно должно быть создано и обновлено до инициализации цикла событий приложения Qt, чтобы приложение MFC могло обновлять свой прогресс (справка QApplication :: exec () говорит, что это возможно с модальными виджетами).

Без настройкибазового родителя QProgressDialog, индикатор выполнения обновляется, как и следовало ожидать, и диалоговое окно остается отзывчивым во время передачи, но я могу продолжать взаимодействовать с приложением MFC.

Поэтому я попытался установить среду миграции Qt / MFCи установка родителя QProgressDialog в QWinWidget:

void ProgressDlg::SetParent(HWND hParentWnd)
{
    QWinWidget* w = new QWinWidget(hParentWnd);
    m_impl->setParent(w);
}

(где m_impl наследуется от QProgressDialog.)

А затем добавление вызывающего кода на стороне MFC для создания диалога:

HWND hWnd = FindWindow(NULL, "ABC");
if(hWnd)
{
    ProgressDlg dlg;
    dlg.SetParent(hWnd);
    //...
    dlg.SetValue(0);
    //...
}

Однако при установке родителя QProgressDialog больше не отображается.(Я получил дескриптор, используя :: FindWindow, передавая Имя окна, чтобы еще больше усложнить сценарий, мое приложение MFC на самом деле представляет собой подключаемый модуль DLL для стороннего исполняемого файла.)

Вся помощь приветствуется.Спасибо.

1 Ответ

2 голосов
/ 22 декабря 2010

Попался!Проблема была вызвана вызовом SetParent ().Вместо этого мне нужно было создать QWinWidget перед QProgressDialog и передать экземпляр QWinWidget в конструктор QProgressDialog в качестве его родителя.

Как подсказывает справка, QWidget :: setParent сбрасывает флаги окна, поэтому диалог больше не былраспознается как диалог.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...