Доступ к QFiledialog программно

Я пытаюсь сделать тестирование системы в QT созданном приложении. Я столкнулся с проблемой ниже. Действие открытого меню в моем приложении вызывает QFileDialog. У меня есть ручка (указатель) для того же. Но я не уверен, как выбрать нужный файл и вызвать действие открытия.

Ниже я попробовал:

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

и обратите внимание, что у меня нет никаких действий для

fileDial->findChildren<QAction*>(). 

1 ответ

Решение

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);
Другие вопросы по тегам