2014-09-02 3 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 для работы с диалоговым окном.

Вот простой пример, когда какой-то текст помещается в элементе управления имени файла и 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

+0

@ anbu-velusamy Если вы используете статические методы QFileDialog, он использует собственные системные диалоги ОС. В этом случае невозможно иметь многоплатформенное решение, потому что оно не реализовано в Qt. Вы можете кодировать решения как для win, так и для mac. Но если вы создадите QFileDialog с «show», это будет обычный диалог Qt, и вы сможете его контролировать. – Ezee

+0

Спасибо. Есть ли способ доступа к Mac? – Anbu

 Смежные вопросы

  • Нет связанных вопросов^_^