gpt4 book ai didi

c++ - 无法在 MFC 应用程序中显示模态 QProgressDialog

转载 作者:行者123 更新时间:2023-11-30 04:36:30 25 4
gpt4 key购买 nike

从 MFC 应用程序启动 Qt 应用程序时,我在显示模态 Qt 对话框时遇到问题。具体来说,当我将其父级设置为 QWinWidget 实例时,QProgressDialog 实例将不会显示在 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 应用程序实际上是第 3 方可执行文件的插件 DLL。)

感谢所有帮助。谢谢。

最佳答案

明白了!问题是由调用 SetParent() 引起的。我需要改为在 QProgressDialog 之前创建 QWinWidget,并将 QWinWidget 实例作为其父级传递给 QProgressDialog 的构造函数。

正如帮助所说,QWidget::setParent 重置窗口标志,因此对话框不再被识别为对话框。

关于c++ - 无法在 MFC 应用程序中显示模态 QProgressDialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4510495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com