QAxWidget Class
QAxWidget 类是一个QWidget ,它封装了一个 ActiveX 控件。更多内容...
| 头文件: | #include <qaxwidget.h> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS AxContainer) target_link_libraries(mytarget PRIVATE Qt6::AxContainer) |
| qmake: | QT += axcontainer |
| 继承自: | QAxBaseWidget 以及QAxBase |
公共函数
| QAxWidget(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()) | |
| QAxWidget(IUnknown *iface, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()) | |
| QAxWidget(const QString &c, 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,可通过IUnknown 指针直接访问 ActiveX。
QAxWidget 是一个QWidget ,在多数情况下可作为该类使用,例如,它可以组织在控件层次结构和布局中,或充当事件过滤器。 标准控件属性(例如enabled )均受支持,但诸如调色板或字体等环境属性的支持取决于ActiveX控件的实现。QAxWidget会尽力提供必要的提示。
但是,您不能重写 Qt 特有的事件处理程序(如 mousePressEvent 或 keyPressEvent),并期望它们能被可靠地调用。嵌入式控件完全覆盖了 QAxWidget,并且通常由其自身处理用户界面。 请使用控件特有的 API(即监听控件的信号),或采用窗口过程子类化等标准的 COM 技术。
QAxWidget 还从QAxBase 继承了大部分与 ActiveX 相关的功能,尤其是dynamicCall() 和querySubObject()。
警告:您可以对 QAxWidget 进行子类化,但不能在子类中使用Q_OBJECT 宏(生成的 moc 文件将无法编译),因此您无法添加更多的信号、插槽或属性。这一限制是由于运行时生成的元对象信息所致。 要解决此问题,请将 QAxWidget 作为QObject 子类的成员进行聚合。
另请参阅 QAxBase 、QAxObject 、QAxScript 以及ActiveQt 框架。
成员函数文档
[explicit] QAxWidget::QAxWidget(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
创建一个空的 QAxWidget 小部件,并将 `parent ` 和 `f ` 传递给 `QWidget ` 的构造函数。要初始化控件,请调用 `setControl()`。
[explicit] QAxWidget::QAxWidget(IUnknown *iface, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
创建一个 QAxWidget,该对象封装了由iface 引用的 COM 对象。parent 和f 将传递给QWidget 的构造函数。
[explicit] QAxWidget::QAxWidget(const QString &c, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
创建一个 QAxWidget 控件,并初始化 ActiveX 控件c 。parent 和f 会被传递给QWidget 的构造函数。
另请参阅 setControl()。
[override virtual noexcept] 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()
当您希望为 ActiveX 控件的客户端实现额外的 COM 接口,或者希望为 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() 的默认实现不会调用此函数。
bool QAxWidget::doVerb(const QString &verb)
请求 ActiveX 控件执行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 是指定消息类型的窗口消息标识符(例如 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 应用程序)进行实验后得出的结果,但针对某些控件可能需要进行修改。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.