Оглавление
Использование элементов управления ActiveX и COM в QtМодуль QAxContainer является частью каркаса ActiveQt. Он предоставляет библиотеку, реализующую подкласс QWidget, QAxWidget, который работает как контейнер для элементов управления ActiveX, и подкласс QObject, QAxObject, который можно использовать для свободного доступа к невизуальным COM-объектам. Работа из сценария с этими COM-объектами встроенными с использованием этих классов возможна через классы QAxScript, QAxScriptManager и QAxScriptEngine, а набор инструментов облегчает программный доступ к COM-объектам. Модуль состоит из шести классов
Некоторые example applications, которые используют стандартные элементы управления ActiveX для предоставления выскоуровневой функциональности пользовательскому интерфейсу. Темы: Использование библиотекиДля сборки приложений Qt, которые могут содержать COM-объекты и элементы управления ActiveX, слинкуйте приложение вместе с модулем QAxContainer, добавив CONFIG += qaxcontainer в .pro-файл вашего приложения. Распространение приложений QAxContainerБиблиотека QAxContainer - статическая, поэтому не нужно распространять заново какие-либо дополнительные файлы при использовании этого модуля. Обратите однако внимание на то, что бинарные файлы используемого вами сервера ActiveX могут не быть установлены на целевой системе, поэтому поставляйте их с вашим пакетом и регистрируйте их во время процесса установки вашего приложения. Создание экземпляров объектов COMЧтобы создать экземпляр COM-объекта используйте функцию API QAxBase::setControl(), или передайте имя объекта непосредственно в конструктор используемого вами подкласса QAxBase. Элемент управления можно указать в ряде форматов, но наиболее быстрым и мощным форматом является использование непосредственного идентификатора класса объекта (CLSID). В идентификатор класса может быть добавлена информация об удалённой машине, на которой был запущен объект, а также может включать в себя лицензионный ключ (license key) для лицензированных элементов управления. Типовые сообщения об ошибкеActiveQt печатает сообщения об ошибках для отладочной информации при возникновении ошибочных ситуаций во время выполнения. Обычно чтобы увидеть эти сообщения вам нужно запустить вашу программу в отладчике (например, в отладочной информации Visual Studio). Экземпляр запрашиваемого элемента управления не может быть созданЭлемент управления, запрашиваемый в QAxBase::setControl(), не установлен в данной системе, или не доступен для текущего пользователя. Элементу управления возможно требуются администраторские права или лицензионный ключ. Если элемент управления лицензирован, передайте лицензионный ключ в QAxBase::setControl как указано в документации. Получение доступа к API объектаActiveQt предоставляет Qt API для COM-объекта и замещает типы данных COM на эквиваленты из Qt. Есть четыре способа вызова API на COM-объекте:
Созздание пространства имен C++Чтобы сгенерировать пространство имен C++ для библиотеки типов, к которой вы хотите получить доступ, используйте инструмент dumpcpp. Запустите вручную этот инструмент на библиотеке типов, которую вы хотите использовать, или ингерируйте его в систему сборки добавив библиотеки типов в переменную TYPELIBS файла .pro вашего приложения: TYPELIBS = file.tlb Обратите внимание на то, что dumpcpp может не показать все API в библиотеке типов. Включите результирующий заголовочный файл в ваш код чтобы получить доступ к API через сгенерированные классы C++. Для получения более подробной информации смотрите пример Qutlook. Вызов по имениИспользуйте QAxBase::dynamicCall() и QAxBase::querySubObject() так же как функции API QObject::setProperty() и QObject::property() для вызова методов и свойств COM-объекта через его имя. Используйте инструмент dumpdoc для получения документации Qt API для любого COM-объекта и его субобъектов; обратите внимание на то, что не все API COM-объекта должны быть доступны. Для получения более подробной информации смотрите пример Webbrowser. Вызов функции через механизм сценариевПриложение Qt может выступить хозяином любого механизма сценариев ActiveScript, установленный в системе. Механизм сценариев может затем запустить код сценария, который получает доступ к COM-объектам. Чтобы создать экземпляр механизма сценария, используйте QAxScriptManager::addObject() чтобы зарегистрировать COM-объекты, к которым вы хотите получить доступ из сценария, и QAxScriptManager::load() для загрузки кода сценария в механизм. Затем вызывайте функции сценария используя QAxScriptManager::call() или QAxScript::call(). API COM-объекта которых доступны через выполнение сценария в зависимости от используемого языка сценариев. Тестовый контейнер ActiveX демонстрирует загрузка файлов сценариев. Вызов функции с использованием "родных" интерфейсов COMЧтобы вызвать функции COM-объекта, к которым нельзя получить доступ посредством какого-либо из вышеприведенных методов можно запросить интерфейс COM непосредственно, используя QAxBase::queryInterface(). Чтобы получить описание C++ соответствующих классов интерфейса используйте директиву #import с библиотекой типов, предоставляемой с элементом управления; за подробностями обращайтесь к руководству по вашему компилятору. Типовые сообщения об ошибкеActiveQt печатает сообщения об ошибках для отладочной информации при возникновении ошибочных ситуаций во время выполнения. Обычно чтобы увидеть эти сообщения вам нужно запустить вашу программу в отладчике (например, в отладочной информации Visual Studio). QAxBase::internalInvoke: No such methodQAxBase::dynamicCall() завершилась неудачно - прототип функции не совпадает ни с одной функцией, доступной в API объекта. Error calling IDispatch member: Non-optional parameter missingQAxBase::dynamicCall() завершилась неудачно - прототип функции верный, но было предоставлено слишком мало параметров. Error calling IDispatch member: Type mismatch in parameter nQAxBase::dynamicCall() завершилась неудачно - прототип функции был верный, но параметр с индексом n был неверного типа и не может быть приведён к правильному типу. QAxScriptManager::call(): No script provides this functionВы пытались вызвать функцию, которая предоставляется механизмом, который не предоставляет интроспекцию (т.е. ActivePython или ActivePerl). Вам нужно вызвать функцию непосредственно на соответствующем объекте QAxScript. Смотрите также Каркас ActiveQt. |
Попытка перевода Qt документации. Если есть желание присоединиться, или если есть замечания или пожелания, то заходите на форум: Перевод Qt документации на русский язык... Люди внесшие вклад в перевод: Команда переводчиков |