2014-09-02 100 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