2014-09-02 154 views
0

我正在嘗試在QT創建的應用程序中進行系統測試。我遇到了下面的問題。 在我的應用程序中打開菜單動作會觸發一個QFileDialog。我有相同的處理(指針)。但我不知道如何選擇所需的文件並觸發打開的操作。以編程方式訪問QFiledialog

下面的事情我已經嘗試:

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

,並請注意,我還沒有得到任何行動的

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

要密切選民:這是非常清楚。你在想什麼? – 2014-09-02 11:25:07

+0

看看這個問題:http://stackoverflow.com/questions/25639613/how-to-close-qfiledialog-programmatically#comment40063834_25639613 – Ezee 2014-09-08 06:52:28

回答

2

QFileDialog只是在系統對話框的包裝。這就是爲什麼在那裏搜索任何QActions沒用。相反,如果你在Windows中運行你的程序,你可以使用WIN API來處理對話。

舉個簡單的例子,其中一些文本放置在文件名中的控制和單擊Open按鈕:

#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

感謝您的回覆。我需要多平臺(win/mac)解決方案 – Anbu 2014-09-07 13:02:54

+0

@ anbu-velusamy如果您使用QFileDialog的靜態方法,它將使用OS的本機系統對話框。在這種情況下,不可能有多平臺解決方案,因爲它沒有在Qt中實現。您可以爲win和mac編寫解決方案。但是如果你用「show」創建QFileDialog,它將是一個通常的Qt對話框,你可以控制它。 – Ezee 2014-09-08 06:55:33

+0

謝謝。有沒有辦法在Mac上訪問? – Anbu 2014-09-11 19:44:47