QAxWidget类

QAxWidget类是一个包装ActiveX控件的自定义QWidget。 更多信息...

头文件 #include <QAxWidget>
CMakefind_package(Qt6 REQUIRED COMPONENTS AxContainer)
target_link_libraries(mytarget PRIVATE Qt6::AxContainer)
qmakeQT += axcontainer
继承自 QAxBaseWidgetQAxBase

公共函数

QAxWidget(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
QAxWidget(const QString &c, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
QAxWidget(IUnknown *iface, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
virtual~QAxWidget() override
voidclear()
virtual QAxAggregated *createAggregate()
booldoVerb(const QString &verb)

重实现公共函数

virtual QSizeminimumSizeHint() const override
virtual voidresetControl() override
virtual QSizesizeHint() const override

保护函数

virtual boolcreateHostWindow(bool initialized)
boolcreateHostWindow(bool initialized, const QByteArray &data)
virtual booltranslateKeyEvent(int message, int keycode) const

重实现保护函数

virtual voidchangeEvent(QEvent *e) override
virtual voidconnectNotify(const QMetaMethod &signal) override
virtual boolinitialize(IUnknown **ptr) override
virtual voidresizeEvent(QResizeEvent *) override

详细说明

QAxWidget可以作为空对象实例化,带有一个应包装的ActiveX控件名,或者带有一个指向已存在的ActiveX控件的接口指针。只要使用QAxBase支持的数据类型,ActiveX控件的属性、方法和事件就作为Qt属性、槽和信号变得可用。基类QAxBase通过IUnknown指针直接访问ActiveX提供了一个API。

QAxWidget 是一个 QWidget,大多数情况下可以像 QWidget 一样使用,例如它可以组织在部件层次结构或布局中,或者充当事件过滤器。支持标准部件属性,例如 enabled,但环境属性如调色板或字体等支持取决于 ActiveX 控件实现,QAxWidget 尝试提供必要的提示。

然而,您无法重新实现 Qt 特定的事件处理器,如 mousePressEvent 或 keyPressEvent 并期望它们能够可靠地被调用。嵌入的控制完全覆盖了 QAxWidget,通常处理用户界面本身。使用特定于控制器的 API(即监听控制器的信号),或使用标准 COM 技术如窗口过程子类化。

QAxWidget 还从 QAxBase 继承了大多数 ActiveX 相关功能,特别是 dynamicCall() 和 querySubObject()。

警告:尽管可以子类化 QAxWidget,但在子类中不能使用 Q_OBJECT 宏(生成的 moc 文件将无法编译),因此无法添加更多信号、槽或属性。这种限制是由于运行时生成的元对象信息造成的。为了解决这个问题,可以将 QAxWidget 作为 QObject 子类的成员聚合。

参见:QAxBaseQAxObjectQAxScriptActiveQt 框架

成员函数文档

[显式] QAxWidget::QAxWidget(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())

创建一个空的 QAxWidget 部件,并将 parentf 传播到 QWidget 构造函数中。要初始化控制,请调用 setControl

[显式] QAxWidget::QAxWidget(const QString &c, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())

创建一个 QAxWidget 部件并初始化 ActiveX 控制器 cparentf 被传播到 QWidget 构造函数中。

参见:setControl

[显式] QAxWidget::QAxWidget(IUnknown *iface, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())

创建一个 QAxWidget,它包绕由 iface 引用的 COM 对象。 parentf 被传播到 QWidget 构造函数中。

[虚拟析构函数] QAxWidget::~QAxWidget()

关闭 ActiveX 控件并销毁 QAxWidget 部件,清理所有分配的资源。

参见:clear

[重载虚拟受保护的] void QAxWidget::changeEvent(QEvent *e)

重新实现:QWidget::changeEvent(QEvent *event)。

void QAxWidget::clear()

关闭 ActiveX 控件。

另请参阅 resetControl().

[重写虚受保护] void QAxWidget::connectNotify(const QMetaMethod &signal)

重写: QObject::connectNotify(const QMetaMethod &signal).

[虚] QAxAggregated *QAxWidget::createAggregate()

在您想要为ActiveX控件客户端实现更多COM接口或想要提供COM接口的备用实现时重写此函数。返回一个QAxAggregated子类的新的对象。

默认实现返回空指针。

[虚拟受保护] bool QAxWidget::createHostWindow(bool initialized)

创建ActiveX控件的客户端,如果控件成功嵌入则返回true,否则返回false。如果initialized为true,则控件已经初始化。

此函数由initialize()调用。如果重写initialize以自定义实际的控件实例化,请在您的重写实现中调用此函数,以便通过默认客户端嵌入控件。创建ActiveX控件的客户端,如果控件成功嵌入则返回true,否则返回false。

[受保护] bool QAxWidget::createHostWindow(bool initialized, const QByteArray &data)

创建ActiveX控件的客户端,如果控件成功嵌入则返回true,否则返回false。如果initialized为false,则控件将使用data进行初始化。控件将通过IPersistStreamInit或IPersistStorage接口进行初始化。

如果控件需要使用自定义数据初始化,请在重写initialize()时调用此函数。默认实现不调用此函数。

bool QAxWidget::doVerb(const QString &verb)

请求ActiveX控件执行动作verb。可能的动作由verbs()返回。

如果对象能够执行动作,该函数返回true,否则返回false。

[重写虚受保护] bool QAxWidget::initialize(IUnknown **ptr)

重写: QAxBase::initialize(IUnknown **ptr).

调用QAxBase::initialize(ptr),并通过调用createHostWindow(false)在成功时嵌入控件。

在控件激活之前初始化控件,请重写此函数,并在调用createHostWindow(true)之前添加您的初始化代码。

成功时返回true,否则返回false

[重写虚] QSize QAxWidget::minimumSizeHint() const

重写属性访问函数:QWidget::minimumSizeHint.

[重写虚函数] void QAxWidget::resetControl()

重新实现: QAxObjectInterface::resetControl().

关闭 ActiveX 控件。

[重写虚保护] void QAxWidget::resizeEvent(QResizeEvent *)

重新实现: QWidget::resizeEvent(QResizeEvent *event).

[重写虚函数] QSize QAxWidget::sizeHint() const

重新实现了对属性的访问函数: QWidget::sizeHint.

[虚保护] bool QAxWidget::translateKeyEvent(int message, int keycode) const

重新实现此函数以将某些键盘事件传递给ActiveX控件。message是窗口消息识别符,指定消息类型(例如WM_KEYDOWN),而keycode是虚拟键码(例如VK_TAB)。

如果函数返回true,则键盘事件将传递给ActiveX控件,控件随后处理该事件或将其传递给Qt。

如果函数返回false,则ActiveQt会忽略键盘事件的处理,即ActiveX控件可能处理它或不处理它。

默认实现返回以下情况为true

WM_SYSKEYDOWNWM_SYSKEYUPWM_KEYDOWN
所有键码VK_MENUVK_TAB、VK_DELETE以及与VK_SHIFT、VK_CONTROL或VK_MENU组合的所有非箭头键

此表是针对流行的ActiveX控件(例如Internet Explorer和Microsoft Office应用程序)进行实验的结果,但对于某些控件可能需要修改。

© 2024 The Qt Company Ltd. 本文档中包含的贡献的版权属于各自的拥有者。本文档根据自由软件基金会发布的GNU自由文档许可证版本1.3的条款提供许可。Qt和相关标志是The Qt Company Ltd在芬兰和其他国家的商标。所有其他商标均为其各自拥有者的财产。