QAxWidget类
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(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 |
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控件的接口指针。只要使用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 子类的成员聚合。
参见:QAxBase,QAxObject,QAxScript 和 ActiveQt 框架。
成员函数文档
[显式]
QAxWidget::QAxWidget(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
创建一个空的 QAxWidget 部件,并将 parent 和 f 传播到 QWidget 构造函数中。要初始化控制,请调用 setControl。
[显式]
QAxWidget::QAxWidget(const QString &c, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
创建一个 QAxWidget 部件并初始化 ActiveX 控制器 c。 parent 和 f 被传播到 QWidget 构造函数中。
参见:setControl。
[显式]
QAxWidget::QAxWidget(IUnknown *iface, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
创建一个 QAxWidget,它包绕由 iface 引用的 COM 对象。 parent 和 f 被传播到 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_SYSKEYDOWN | WM_SYSKEYUP | WM_KEYDOWN |
---|---|---|
所有键码 | VK_MENU | VK_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在芬兰和其他国家的商标。所有其他商标均为其各自拥有者的财产。