Класс QAxWidget
Класс QAxWidget — это QWidget, который оборачивает ActiveX-компонент. Подробнее...
| Заголовок: | #include <QAxWidget> |
| qmake: | QT += axcontainer |
| Наследует: | QWidget и QAxBase |
Открытые функции
| QAxWidget(IUnknown *iface, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()) | |
| QAxWidget(const QString &c, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()) | |
| QAxWidget(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()) | |
| virtual | ~QAxWidget() override |
| virtual QAxAggregated * | createAggregate() |
| bool | doVerb(const QString &verb) |
Переопределённые открытые функции
| virtual void | clear() override |
| virtual QSize | minimumSizeHint() const override |
| virtual QSize | sizeHint() const override |
Защищённые функции
| virtual bool | createHostWindow(bool initialized) |
| bool | createHostWindow(bool initialized, const QByteArray &data) |
| virtual bool | translateKeyEvent(int message, int keycode) const |
Переопределённые защищённые функции
| virtual void | changeEvent(QEvent *e) override |
| virtual void | connectNotify(const QMetaMethod &signal) override |
| virtual bool | initialize(IUnknown **ptr) override |
| virtual void | resizeEvent(QResizeEvent *) override |
Подробное описание
Объект QAxWidget может быть создан как пустой объект, с именем ActiveX-компонента, который он должен оборачивать, или с существующим указателем на интерфейс ActiveX-компонента. Свойства, методы и события ActiveX-компонента, которые используют только поддерживаемые QAxBase типы данных, становятся доступными как свойства, слоты и сигналы Qt. Базовый класс QAxBase предоставляет API для прямого доступа к ActiveX через указатель IUnknown.
QAxWidget является QWidget и в основном может использоваться как таковой, например, он может быть организован в иерархии виджетов и макетов или действовать как фильтр событий. Стандартные свойства виджета, например, enabled, поддерживаются, но это зависит от ActiveX-компонента, чтобы он поддерживал такие свойства, как палитра или шрифт. QAxWidget пытается предоставить необходимые подсказки.
Однако вы не можете переопределить обработчики событий Qt, такие как mousePressEvent или keyPressEvent, и ожидать, что они будут вызываться надёжно. Встроенный компонент полностью покрывает QAxWidget и, как правило, сам обрабатывает пользовательский интерфейс. Используйте специфичные для компонента API (т.е. подписывайтесь на сигналы компонента) или используйте стандартные COM-техники, такие как подмена процедуры окна.
QAxWidget также наследует большую часть своей функциональности, связанной с ActiveX, от QAxBase, в частности, dynamicCall() и querySubObject().
Предупреждение: Вы можете наследовать от QAxWidget, но не можете использовать макрос Q_OBJECT в подклассе (сгенерированный файл moc не будет компилироваться), поэтому вы не можете добавлять дополнительные сигналы, слоты или свойства. Это ограничение связано с метаобъектной информацией, генерируемой во время выполнения. Чтобы обойти эту проблему, агрегируйте QAxWidget как член подкласса QObject.
См. также QAxBase, QAxObject, QAxScript и Фреймворк ActiveQt.
Документация по членам-функциям
QAxWidget::QAxWidget(IUnknown *iface, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
Создаёт QAxWidget, который оборачивает COM-объект, на который ссылается iface. parent и f передаются конструктору QWidget.
QAxWidget::QAxWidget(const QString &c, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
Создаёт виджет QAxWidget и инициализирует ActiveX-компонент c. parent и f передаются конструктору QWidget.
См. также setControl().
QAxWidget::QAxWidget(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
Создаёт пустой виджет QAxWidget и передаёт parent и f конструктору QWidget. Чтобы инициализировать компонент, вызовите setControl().
[override virtual] QAxWidget::~QAxWidget()
Закрывает ActiveX-компонент и уничтожает виджет QAxWidget, очищая все выделенные ресурсы.
См. также clear().
[override virtual protected] void QAxWidget::changeEvent(QEvent *e)
Переопределяет: QWidget::changeEvent(QEvent *event).
[override virtual] void QAxWidget::clear()
Переопределяет: QAxBase::clear().
Закрывает ActiveX-компонент.
[override virtual protected] void QAxWidget::connectNotify(const QMetaMethod &signal)
Переопределяет: QObject::connectNotify(const QMetaMethod &signal).
[virtual] QAxAggregated *QAxWidget::createAggregate()
Переопределите эту функцию, когда хотите реализовать дополнительные COM-интерфейсы для клиентской части ActiveX-компонента или когда хотите предоставить альтернативные реализации COM-интерфейсов. Верните новый объект подкласса QAxAggregated.
По умолчанию возвращает нулевой указатель.
[virtual protected] bool QAxWidget::createHostWindow(bool initialized)
Создаёт клиентскую часть для ActiveX-компонента и возвращает true, если компонент был успешно вставлен, иначе — false. Если initialized равно true, компонент уже был инициализирован.
Эта функция вызывается initialize(). Если вы переопределите initialize для настройки фактической инициализации компонента, вызовите эту функцию в вашем переопределении, чтобы компонент был вставлен по умолчанию с помощью клиентской части.
[protected] bool QAxWidget::createHostWindow(bool initialized, const QByteArray &data)
Создаёт клиентскую часть для ActiveX-компонента и возвращает true, если компонент был успешно вставлен, иначе — false. Если initialized равно false, компонент будет инициализирован с помощью data. Инициализация компонента будет осуществляться через интерфейсы IPersistStreamInit или IPersistStorage.
Если требуется инициализировать элемент управления с помощью пользовательских данных, вызовите эту функцию в своём переопределении функции initialize(). Эта функция не вызывается по умолчанию в реализации initialize().
Эта функция была введена в Qt 4.4.
bool QAxWidget::doVerb(const QString &verb)
Запрашивает выполнение действия verb у элемента управления ActiveX. Возможные значения verb возвращаются функцией verbs().
Функция возвращает true, если действие может быть выполнено, иначе возвращает false.
Эта функция была введена в Qt 4.1.
[override virtual protected] bool QAxWidget::initialize(IUnknown **ptr)
Переопределяет: QAxBase::initialize(IUnknown **ptr).
Вызывает QAxBase::initialize(ptr) и, в случае успеха, встраивает элемент управления в этот виджет, вызывая createHostWindow(false).
Чтобы инициализировать элемент управления до его активации, переопределите эту функцию и добавьте свой код инициализации перед вызовом createHostWindow(true).
Эта функция была введена в Qt 4.2.
[override virtual] QSize QAxWidget::minimumSizeHint() const
Переопределяет: QWidget::minimumSizeHint() const.
[override virtual protected] void QAxWidget::resizeEvent(QResizeEvent *)
Переопределяет: QWidget::resizeEvent(QResizeEvent *event).
[override virtual] QSize QAxWidget::sizeHint() const
Переопределяет: QWidget::sizeHint() const.
[virtual protected] bool QAxWidget::translateKeyEvent(int message, int keycode) const
Переопределите эту функцию, чтобы передавать определённые события нажатия клавиш элементу управления ActiveX. message — идентификатор сообщения Windows, определяющий тип сообщения (например, WM_KEYDOWN), а keycode — виртуальный код клавиши (например, VK_TAB).
Если функция возвращает true, событие нажатия клавиши передаётся элементу управления ActiveX, который либо обрабатывает его, либо передаёт событие Qt.
Если функция возвращает false, обработка события нажатия клавиши игнорируется ActiveQt, т.е. элемент управления ActiveX может обработать его или нет.
По умолчанию функция возвращает true в следующих случаях:
| WM_SYSKEYDOWN | WM_SYSKEYUP | WM_KEYDOWN |
|---|---|---|
| Все коды клавиш | VK_MENU | VK_TAB, VK_DELETE и все клавиши, кроме стрелок, в сочетании с VK_SHIFT, VK_CONTROL или VK_MENU |
Эта таблица является результатом экспериментов с популярными элементами управления ActiveX, такими как Internet Explorer и приложения Microsoft Office, но для некоторых элементов управления может потребоваться изменение.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.13/qaxwidget.html