2010-12-22 4 views
1

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입니다.)

모두 감사합니다. 감사.

답변

2

Gotcha! 이 문제는 SetParent() 호출로 인해 발생했습니다. 대신 QProgressDialog 전에 QWinWidget을 만들고 QWinWidget 인스턴스를 부모로 QProgressDialog의 생성자에 전달해야했습니다.

도움말에서 말한 것처럼 QWidget :: setParent는 창 플래그를 재설정하므로 더 이상 대화 상자가 대화 상자로 인식되지 않습니다.

관련 문제