The QAxWidget 类是 QWidget 用于包裹 ActiveX 控件。 更多...
头: | #include <QAxWidget> |
qmake: | QT += axcontainer |
继承: | QWidget and 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 |
virtual QAxAggregated * | createAggregate () |
bool | doVerb (const QString & verb ) |
virtual void | clear () override |
virtual QSize | minimumSizeHint () const override |
virtual QSize | sizeHint () const override |
const QMetaObject | staticMetaObject |
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 |
The QAxWidget 类是 QWidget 用于包裹 ActiveX 控件。
A
QAxWidget
可以被实例化成空对象,采用它应包裹的 ActiveX 控件名称,或采用指向 ActiveX 控件的现有接口指针。ActiveX 控件的特性、方法及事件仅使用
QAxBase
支持数据类型,变为可用 Qt 特性、槽及信号。基类
QAxBase
提供 API 以直接访问 ActiveX 透过
IUnknown
指针。
QAxWidget 是 QWidget 且主要可以这样使用,如,可以按 Widget 层次结构和布局组织它,或充当事件过滤器。标准 Widget 特性,如 enabled 是支持的,但从属 ActiveX 控件以实现支持环境特性 (如:调色板或字体)。 QAxWidget 会试着提供必要提示。
不管怎样,无法重实现特定 Qt 事件处理程序像 mousePressEvent or keyPressEvent 并期望能可靠调用它们。嵌入式控件覆盖 QAxWidget 完全,且通常用于处理用户界面本身。使用特定控件 API (即:监听控件的信号),或使用标准 COM 技术 (像窗口过程子类化)。
QAxWidget 还继承了其 ActiveX 相关的大部分功能从 QAxBase ,尤其 dynamicCall () 和 querySubObject ().
警告:
可以子类化
QAxWidget
,但无法使用
Q_OBJECT
宏在子类中 (不会编译生成的 moc 文件),所以,无法进一步添加信号、槽或特性。此局限性是由在运行时,生成的元对象信息造成的。要解决此问题,聚合
QAxWidget
作为成员对于
QObject
子类。
另请参阅 QAxBase , QAxObject , QAxScript ,和 ActiveQt 框架 .
创建空 QAxWidget 小部件并传播 parent and f 到 QWidget 构造函数。要初始化控件,调用 setControl ().
创建 QAxWidget 小部件并初始化 ActiveX 控件 c . parent and f 被传播给 QWidget 构造函数。
另请参阅 setControl ().
创建 QAxWidget 包裹引用 COM 对象通过 iface . parent and f 被传播给 QWidget 构造函数。
[override virtual]
QAxWidget::
~QAxWidget
()
关闭 ActiveX 控件并销毁 QAxWidget 小部件,清理所有分配资源。
另请参阅 clear ().
[override virtual protected]
void
QAxWidget::
changeEvent
(
QEvent
*
e
)
重实现自 QWidget::changeEvent ().
[override virtual]
void
QAxWidget::
clear
()
重实现自 QAxBase::clear ().
关闭 ActiveX 控件。
[override virtual protected]
void
QAxWidget::
connectNotify
(const
QMetaMethod
&
signal
)
重实现自 QObject::connectNotify ().
[虚拟]
QAxAggregated
*QAxWidget::
createAggregate
()
重实现此函数,当想为 ActiveX 控件客户端站点实现其它 COM 接口时,或者当想要提供 COM 接口的替代实现时。返回新对象为 QAxAggregated 子类。
默认实现返回 null 指针。
[virtual protected]
bool
QAxWidget::
createHostWindow
(
bool
initialized
)
创建 ActiveX 控件客户端站点,并返回 true 若可以成功嵌入控件,否则返回 false。若 initialized 为 true 控件已初始化。
此函数被调用通过 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 引入。
请求 ActiveX 控制以履行动作 verb 。可能的 verb 的返回是通过 verbs ().
函数返回 true 若对象能履行动作,否则返回 false。
该函数在 Qt 4.1 引入。
[override virtual protected]
bool
QAxWidget::
initialize
(
IUnknown
**
ptr
)
重实现自 QAxBase::initialize ().
调用 QAxBase::initialize ( ptr ),并嵌入控件在此 Widget 中通过调用 createHostWindow (false) 若成功。
为在激活前初始化控件,重实现此函数并添加初始化代码先于调用 createHostWindow (true)。
该函数在 Qt 4.2 引入。
[override virtual]
QSize
QAxWidget::
minimumSizeHint
() const
重实现自 QWidget::minimumSizeHint ().
[override virtual protected]
void
QAxWidget::
resizeEvent
(
QResizeEvent *
)
重实现自 QWidget::resizeEvent ().
[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 应用程序) 的实验结果,但对于某些控件,可能要求修改。