从 MFC 应用程序启动 Qt 应用程序时,我在显示模式 Qt 对话框时遇到问题。具体来说,当我将 QProgressDialog 实例设置为 QWinWidget 实例时,它不会显示在 MFC 应用程序中。这是我的问题更详细...
我的 MFC 应用程序需要将大量数据传输到 Qt 应用程序,这是一个 DLL。Qt 应用程序在其 API 中包含一个 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。)
所有帮助表示赞赏。谢谢。