2014-09-02 7 views
0

QT 만든 응용 프로그램에서 시스템 테스트를 수행하려고합니다. 아래의 문제가 발생했습니다. 내 응용 프로그램에서 메뉴 열기 동작을 실행하면 QFileDialog가 트리거됩니다. 내가 핸들 (포인터) 같은있다. 하지만 필요한 파일을 선택하고 열린 동작을 트리거하는 방법을 잘 모르겠습니다. 시스템 대화 상자에서 단지 래퍼입니다프로그래밍 방식으로 QFiledialog에 액세스

fileDial->setDirectory("xxxx"); 
fileDial->selectFile(xxx"); 
fileDial->fileSelected("xxxx"); 
fileDial->selectNameFilter("xxx"); 

을하고 내가

fileDial->findChildren<QAction*>(). 
+0

:이 완벽 분명하다 여기

일부 텍스트가 파일 이름 컨트롤에 배치하고 열기 버튼을 클릭하는 간단한 예이다. 무슨 생각하고 있었던거야? –

+0

이 질문을보십시오 : http://stackoverflow.com/questions/25639613/how-to-close-qfiledialog-programmatically#comment40063834_25639613 – Ezee

답변

2

QFileDialog에 대한 조치를하지 않은 참고 : 가지 아래

난 노력했다. 그렇기 때문에 QActions을 검색하는 것은 쓸모가 없습니다. 대신 Windows에서 프로그램을 실행하면 WIN API를 사용하여 대화 상자를 처리 할 수 ​​있습니다. 가까운 유권자들에게

#define WAIT(A) while (!(A)) {} 
HWND dialogHandle, button, edit, combo, comboEx; 
WAIT(dialogHandle = FindWindow(NULL, L"Open")); 
WAIT(button = FindWindowEx(dialogHandle, NULL, L"Button", L"&Open")); 
WAIT(comboEx = FindWindowEx(dialogHandle, comboEx, L"ComboBoxEx32", NULL)); 
WAIT(combo = FindWindowEx(comboEx, combo, L"ComboBox", NULL)); 
WAIT(edit = FindWindowEx(combo, NULL, L"Edit", NULL)); 

char text[] = "arc.h"; 
SendMessageA(edit, WM_SETTEXT, 0, (LPARAM) text); 

SendMessage(button, BM_CLICK, 0, 0); 
+0

답장을 보내 주셔서 감사합니다. – Anbu

+0

@ anbu-velusamy QFileDialog의 정적 메서드를 사용하는 경우 OS의 네이티브 시스템 대화 상자를 사용합니다. 이 경우 멀티 플랫폼 솔루션을 사용할 수 없습니다. Qt에서 구현되지 않았기 때문입니다. win과 mac 모두를위한 솔루션을 코딩 할 수 있습니다. 그러나 "show"로 QFileDialog를 생성하면 일반적인 Qt 대화 상자가되고 제어 할 수 있습니다. – Ezee

+0

고맙습니다. Mac에서 액세스 할 수 있습니까? – Anbu