Класс QAxWidget
Класс QAxWidget — это QWidget, который оборачивает ActiveX-контроль. Подробнее...
| Заголовок: | #include <QAxWidget> |
| CMake: | find_package(Qt6 COMPONENTS AxContainer REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::AxContainer) |
| qmake: | QT += axcontainer |
| Наследуется от: | QAxBaseWidget и 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 |
| void | clear() |
| virtual QAxAggregated * | createAggregate() |
| bool | doVerb(const QString &verb) |
Переопределённые открытые функции
| virtual QSize | minimumSizeHint() const override |
| virtual void | resetControl() 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).
void QAxWidget::clear()
Закрывает ActiveX-контроль.
См. также resetControl().
[override virtual protected] void QAxWidget::connectNotify(const QMetaMethod &signal)
Переопределяет: QObject::connectNotify(const QMetaMethod &signal).
[virtual] QAxAggregated *QAxWidget::createAggregate()
Переопределите эту функцию, если хотите реализовать дополнительные COM-интерфейсы для стороны клиента ActiveX-контроля или если хотите предоставить альтернативные реализации COM-интерфейсов. Возвращает новый объект подкласса QAxAggregated.
По умолчанию возвращает null-указатель.
[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().
bool QAxWidget::doVerb(const QString &verb)
Запрашивает элемент управления ActiveX выполнить действие verb. Возможные значения verb возвращаются функцией verbs().
Функция возвращает true, если действие можно выполнить, иначе — false.
[override virtual protected] bool QAxWidget::initialize(IUnknown **ptr)
Переопределяет: QAxBase::initialize(IUnknown **ptr).
Вызывает QAxBase::initialize(ptr) и встраивает элемент управления в этот виджет, вызывая createHostWindow(false), если это удалось.
Чтобы инициализировать элемент управления до его активации, переопределите эту функцию и добавьте свой код инициализации перед вызовом createHostWindow(true).
Возвращает true при успехе, false в противном случае.
[override virtual] QSize QAxWidget::minimumSizeHint() const
Переопределяет функцию доступа к свойству: QWidget::minimumSizeHint.
[override virtual] void QAxWidget::resetControl()
Переопределяет: QAxObjectInterface::resetControl().
Выключает элемент управления ActiveX.
[override virtual protected] void QAxWidget::resizeEvent(QResizeEvent *)
Переопределяет: QWidget::resizeEvent(QResizeEvent *event).
[override virtual] QSize QAxWidget::sizeHint() const
Переопределяет функцию доступа к свойству: QWidget::sizeHint.
[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-6.2/qaxwidget.html