2016-07-05 2 views
0

При попытке запустить AUT с набором инструментов, установленным в Qt, и установить «Hook to sub-processes, запущенным приложением», я должен запустить приложение (которое это приложение Windows, которое запускает процесс настройки окна Qt), используя файл dllpreload.exe, предоставленный Squish для присоединения к окну Qt. Выполнение этого не показывает консоль Windows и просто запускает окно Qt. Это успешно подключается к Qt ...Squish Hook в AUT, у которого есть консоль Windows и окно Qt

При установке testSettings.setWrappersForApplication("application", ("Windows", "Qt")) или testSettings.setWrappersForApplication("application", ("Windows")) он не может подключиться к окну Qt в виде окна Qt и не распознает компоненты Qt.

Есть ли в любом случае хлюпать, чтобы распознать консоль Windows как «Windows» и окно Qt как «Qt»?

+0

У вас есть собственное приложение Windows, которое запускает приложение Qt, или оно наоборот? Приводит ли собственное приложение Windows к самому пользовательскому интерфейсу? –

+0

Натуральное приложение для Windows, которое запускает приложение Qt; более конкретно, приложение Windows считывает файл сценария и загружает компоненты Qt, хранящиеся в DLL, а затем создает Qt-окно из файла .ui. Приложение Windows представляет собой консольное приложение. – CurtisJC

ответ

0

Заявление о подключении к приложению Qt, которое является подпроцессом родного приложения Windows, задокументировано в a Knowledge Base article. Самый простой подход к этому является:

  1. Переименуйте исходный исполняемый файл приложения Qt, скажем myqtapp.exe к тем же названием, но добавить подчеркивание в конце, т.е. myqtapp_.exe.
  2. Переименуйте программу dllpreload.exe, отправленную с Squish на myqtapp.exe.

Таким образом, ваша программа для Windows будет неосознанно называть dllpreload.exe, который будет выводить имя файла оригинального приложения от своего имени файла (это будет просто добавить подчеркивание).

Программа dllpreload.exe не является идеальным прокси-сервером, хотя, возможно, ваше приложение Windows замечает, что оно не взаимодействует с реальным AUT. В этом случае может быть проще изменить приложение Windows, чтобы он явно добавлял dllpreload.exe в командную строку, которая используется для запуска приложения Qt.

Вы можете сделать это условно так, чтобы это было сделано только при запуске приложения Windows через Squish. Эту ситуацию можно обнаружить путем тестирования наличия переменной окружения SQUISH_PREFIX.

+0

Использование dllpreload в самом приложении запустило окно Qt, но Squish не подключался к нему, как ожидалось. Следуя связанной статье базы знаний (используя «Squish :: installBuiltinHook();»), я смог использовать как консоль Windows, так и подключиться к окну Qt, как я бы надеялся. Кажется, что проблема связана с тем, что Squish распознает QtWindow в «waitForObject», когда я попытался отправить его QCloseEvent, но, по крайней мере, Squish распознает компоненты окна. – CurtisJC