QAxWidget Class
QAxWidget 类是一个封装 ActiveX 控件的QWidget 。更多
头文件: | #include <QAxWidget> |
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 提供了通过IUnknown
指针直接访问 ActiveX 的 API。
QAxWidget 是一个QWidget ,大部分情况下可作为 使用,例如,它可以在 widget 层次结构和布局中组织,或作为事件过滤器使用。QAxWidget 支持enabled 等标准 widget 属性,但是否支持调色板或字体等环境属性则取决于 ActiveX 控件。QAxWidget 尝试提供必要的提示。
不过,您不能重新实现特定于 Qt 的事件处理程序(如 mousePressEvent 或 keyPressEvent),并期望它们能被可靠地调用。嵌入式控件完全覆盖了 QAxWidget,通常会自行处理用户界面。使用控件特定的 API(即监听控件的信号),或使用标准的 COM 技术(如窗口过程子类化)。
QAxWidget 还从QAxBase 继承了大部分 ActiveX 相关功能,特别是dynamicCall() 和querySubObject() 。
警告: 您可以对 QAxWidget 进行子类化,但不能在子类化中使用Q_OBJECT
宏(生成的 moc 文件将无法编译),因此您不能进一步添加信号、槽或属性。这种限制是由于运行时生成的元对象信息造成的。要解决这个问题,可将 QAxWidget 聚合为QObject 子类的成员。
另请参阅 QAxBase,QAxObject,QAxScript 和ActiveQt Framework。
成员函数文档
[explicit]
QAxWidget::QAxWidget(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
创建一个空的 QAxWidget widget,并将parent 和f 传播到QWidget 构造函数。要初始化控件,请调用setControl() 。
[explicit]
QAxWidget::QAxWidget(IUnknown *iface, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
创建一个 QAxWidget,该 QAxWidget 封装了iface 引用的 COM 对象。parent 和f 会传播到QWidget 构造函数。
[explicit]
QAxWidget::QAxWidget(const QString &c, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
创建 QAxWidget widget 并初始化 ActiveX 控件c 。parent 和f 会传播到QWidget 结构体。
另请参阅 setControl() 。
[override virtual noexcept]
QAxWidget::~QAxWidget()
关闭 ActiveX 控件并销毁QAxWidget widget,清理所有分配的资源。
另请参阅 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),将控件嵌入该 widget。
要在激活控件前对其进行初始化,请重新实现此函数,并在调用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
message 是指定消息类型(即 WM_KEYDOWN)的窗口消息标识符,keycode 是虚拟键码(即 VK_TAB)。
如果函数返回 true,则按键事件将传递给 ActiveX 控件,然后由 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 应用程序)进行试验的结果,但对于某些控件可能需要进行修改。
© 2025 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.