[Previous: QtTest Module] [Qt's Modules] [Next: QAxServer Module] Модуль QAxContainer
|
QAxBase | Абстрактный класс, который предоставляет API для инициализации и доступа к COM-объектам |
---|---|
QAxObject | QObject служащий оберткой для COM-объекта |
QAxScript | Обертка вокруг кода сценария |
QAxScriptEngine | Обертка вокруг движка сценария |
QAxScriptManager | Мост между объектами приложения и кодом скрипта |
QAxWidget | QWidget, который является оберткой вокруг элемента управления ActiveX |
The QAxContainer module is part of the ActiveQt framework. It provides a library implementing a QWidget subclass, QAxWidget, that acts as a container for ActiveX controls, and a QObject subclass, QAxObject, that can be used to easily access non-visual COM objects. Scripting COM objects embedded using these classes is possible through the QAxScript, QAxScriptManager and QAxScriptEngine classes, and a set of tools makes it easy to access COM objects programmatically.
Модуль состоит из шести классов
Некоторые example applications, которые используют стандартные элементы управления ActiveX для предоставления выскоуровневой функциональности пользовательскому интерфейсу.
Темы:
To build Qt applications that can host COM objects and ActiveX controls link the application against the QAxContainer module by adding
CONFIG += qaxcontainer
в .pro-файл вашего приложения.
The QAxContainer library is static, so there is no need to redistribute any additional files when using this module. Обратите однако внимание на то, что бинарные файлы используемого вами сервера ActiveX могут не быть установлены на целевой системе, поэтому поставляйте их с вашим пакетом и регистрируйте их во время процесса установки вашего приложения.
Чтобы создать экземпляр COM-объекта используйте функцию API QAxBase::setControl(), или передайте имя объекта непосредственно в конструктор используемого вами подкласса QAxBase.
Элемент управления можно указать в ряде форматов, но наиболее быстрым и мощным форматом является использование непосредственного идентификатора класса объекта (CLSID). В идентификатор класса может быть добавлена информация об удалённой машине, на которой был запущен объект, а также может включать в себя лицензионный ключ (license key) для лицензированных элементов управления.
ActiveQt печатает сообщения об ошибках для отладочной информации при возникновении ошибочных ситуаций во время выполнения. Обычно чтобы увидеть эти сообщения вам нужно запустить вашу программу в отладчике (например, в отладочной информации Visual Studio).
Элемент управления, запрашиваемый в QAxBase::setControl(), не установлен в данной системе, или не доступен для текущего пользователя.
Элементу управления возможно требуются администраторские права или лицензионный ключ. Если элемент управления лицензирован, передайте лицензионный ключ в QAxBase::setControl как указано в документации.
ActiveQt предоставляет Qt API для COM-объекта и замещает типы данных COM на эквиваленты из Qt.
Есть четыре способа вызова API на COM-объекте:
Чтобы сгенерировать пространство имен 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 непосредственно, используя QAxBase::queryInterface(). Чтобы получить описание C++ соответствующих классов интерфейса используйте директиву #import с библиотекой типов, предоставляемой с элементом управления; за подробностями обращайтесь к руководству по вашему компилятору.
ActiveQt печатает сообщения об ошибках для отладочной информации при возникновении ошибочных ситуаций во время выполнения. Обычно чтобы увидеть эти сообщения вам нужно запустить вашу программу в отладчике (например, в отладочной информации Visual Studio).
QAxBase::dynamicCall() завершилась неудачно - прототип функции не совпадает ни с одной функцией, доступной в API объекта.
QAxBase::dynamicCall() завершилась неудачно - прототип функции верный, но было предоставлено слишком мало параметров.
QAxBase::dynamicCall() завершилась неудачно - прототип функции был верный, но параметр с индексом n был неверного типа и не может быть приведён к правильному типу.
Вы пытались вызвать функцию, которая предоставляется механизмом, который не предоставляет интроспекцию (т.е. ActivePython или ActivePerl). Вам нужно вызвать функцию непосредственно на соответствующем объекте QAxScript.
The QAxContainer module is not covered by the GNU General Public License (GPL), the GNU Lesser General Public License (LGPL), or the Qt Commercial License. Instead, it is distributed under the following license.
Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
All rights reserved.
Contact: Nokia Corporation (qt-info@nokia.com)
You may use this file under the terms of the BSD license as follows:
"Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
* Neither the name of Nokia Corporation and its Subsidiary(-ies) nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
Смотрите также Каркас ActiveQt.
[Previous: QtTest Module] [Qt's Modules] [Next: QAxServer Module]
Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies) | Торговые марки | Qt 4.5.3 |
Попытка перевода Qt документации. Если есть желание присоединиться, или если есть замечания или пожелания, то заходите на форум: Перевод Qt документации на русский язык... Люди внесшие вклад в перевод: Команда переводчиков |