MFC 응용 프로그램에서 Qt 응용 프로그램을 시작할 때 모달 Qt 대화 상자를 표시하는 데 문제가 있습니다. 특히 QProgressDialog 인스턴스는 부모를 QWinWidget 인스턴스로 설정할 때 MFC 응용 프로그램 내에 표시되지 않습니다. 여기에 내 문제가 자세히 ...MFC 응용 프로그램에서 모달 QProgressDialog를 표시 할 수 없습니다.
내 MFC 응용 프로그램은 많은 양의 데이터를 DLL 인 Qt 응용 프로그램으로 전송해야합니다. Qt 애플리케이션은 ProgressDlg 클래스를 API에 포함하고 있습니다. ProgressDlg 클래스는 QProgressDialog를 사용하여 구현됩니다. 이 대화 상자는 Qt 애플리케이션의 이벤트 루프가 초기화되기 전에 MFC 애플리케이션이 진행 상황을 업데이트 할 수 있도록 생성 및 업데이트되어야합니다 (Qapplication :: exec() 도움말은 모달 위젯에서 가능함).
기본 QProgressDialog의 부모를 설정하지 않으면 예상대로 진행률 표시 줄이 업데이트되고 대화 상자는 전송 중에 응답을 유지하지만 MFC 응용 프로그램을 계속 해석 할 수 있습니다.
void ProgressDlg::SetParent(HWND hParentWnd)
{
QWinWidget* w = new QWinWidget(hParentWnd);
m_impl->setParent(w);
}
(. m_impl이 QProgressDialog에서 유래)
그리고 다음에 호출하는 코드를 추가 :
은 그래서 Qt는/MFC 마이그레이션 프레임 워크를 설치하고 QProgressDialog의 부모를 설정 QWinWidget려고 노력 다이얼로그를 생성하는 MFC 측 :
HWND hWnd = FindWindow(NULL, "ABC");
if(hWnd)
{
ProgressDlg dlg;
dlg.SetParent(hWnd);
//...
dlg.SetValue(0);
//...
}
그러나, 부모를 설정하면 (자), QProgressDialog는 표시되지 않습니다. (필자는 :: FindWindow를 사용하여 핸들을 검색하여 Window Name을 전달하여 시나리오를 복잡하게 만들었습니다. MFC 응용 프로그램은 실제로 제 3 자 실행 파일에 대한 DLL입니다.)
모두 감사합니다. 감사.