Класс 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 для настройки фактического создания компонента, вызовите эту функцию в своём переопределении, чтобы компонент был вставлен стандартной клиентской частью. Создаёт клиентскую часть для ActiveX-компонента и возвращает true, если компонент был успешно вставлен, в противном случае возвращает false.
[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).
Возвращает true при успехе и false в противном случае.
Функция добавлена в Qt 4.2.
[override virtual] QSize QAxWidget::minimumSizeHint() const
Переопределяет функцию доступа к свойству: QWidget::minimumSizeHint.
[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-5.14/qaxwidget.html