Multiple 示例演示了QAxFactory的实现,以使用QAXFACTORY_EXPORT()宏在单个进程内 ActiveX 服务器中提供多个 ActiveX 控件。本例中的 ActiveX 控件是简单的QWidget子类,它们重新实现了QWidget::paintEvent ()。
Qt组件推荐:
- QtitanRibbon| 下载试用: 遵循Microsoft Ribbon UI Paradigm for Qt技术的Ribbon UI组件,致力于为Windows、Linux和Mac OS X提供功能完整的Ribbon组件。
- QtitanChart | 下载试用 :是一个C ++库,代表一组控件,这些控件使您可以快速地为应用程序提供漂亮而丰富的图表。并且支持所有主要的桌面
Multiple 示例演示了QAxFactory的实现,以使用QAXFACTORY_EXPORT()宏在单个进程内 ActiveX 服务器中提供多个 ActiveX 控件。本例中的 ActiveX 控件是简单的QWidget子类,它们重新实现了QWidget::paintEvent ()。
class QAxWidget1 : public QWidget{ Q_OBJECT Q_CLASSINFO("ClassID", "{1D9928BD-4453-4bdd-903D-E525ED17FDE5}") Q_CLASSINFO("InterfaceID", "{99F6860E-2C5A-42ec-87F2-43396F4BE389}") Q_CLASSINFO("EventsID", "{0A3E9F27-E4F1-45bb-9E47-63099BCCD0E3}") Q_PROPERTY(QColor fillColor READ fillColor WRITE setFillColor)public: explicit QAxWidget1(QWidget *parent = nullptr) : QWidget(parent) { } QColor fillColor() const { return m_fillColor; } void setFillColor(const QColor &fc) { m_fillColor = fc; repaint(); }protected: void paintEvent(QPaintEvent *e) override { QPainter paint(this); QRect r = rect(); r.adjust(10, 10, -10, -10); paint.fillRect(r, m_fillColor); }private: QColor m_fillColor = Qt::red;};
第一个控件绘制一个实心矩形。填充颜色作为属性公开。Q_CLASSINFO()用于指定 COM 标识符。
class QAxWidget2 : public QWidget{ Q_OBJECT Q_CLASSINFO("ClassID", "{58139D56-6BE9-4b17-937D-1B1EDEDD5B71}") Q_CLASSINFO("InterfaceID", "{B66280AB-08CC-4dcc-924F-58E6D7975B7D}") Q_CLASSINFO("EventsID", "{D72BACBA-03C4-4480-B4BB-DE4FE3AA14A0}") Q_CLASSINFO("ToSuperClass", "QAxWidget2") Q_CLASSINFO("StockEvents", "yes") Q_CLASSINFO("Insertable", "yes") Q_PROPERTY(int lineWidth READ lineWidth WRITE setLineWidth)public: using QWidget::QWidget; int lineWidth() const { return m_lineWidth; } void setLineWidth(int lw) { m_lineWidth = lw; repaint(); }protected: void paintEvent(QPaintEvent *e) override { QPainter paint(this); QPen pen = paint.pen(); pen.setWidth(m_lineWidth); paint.setPen(pen); QRect r = rect(); r.adjust(10, 10, -10, -10); paint.drawEllipse(r); }private: int m_lineWidth = 1;};
第二个控件绘制一个圆圈。linewith 作为属性公开。Q_CLASSINFO()用于指定 COM 标识符,并设置ToSuperClass和StockEvents属性以仅公开类本身的 API,并将 COM 股票事件添加到 ActiveX 控件。
#include "ax1.h" "ax1.h"#include "ax2.h" "ax2.h"#include <QAxFactory> <QAxFactory>QT_USE_NAMESPACEQAXFACTORY_BEGIN(("{98DE28B6-6CD3-4e08-B9FA-3D1DB43F1D2F}", "{05828915-AD1C-47ab-AB96-D6AD1E25F0E2}") QAXCLASS(QAxWidget1)(QAxWidget1) QAXCLASS(QAxWidget2)(QAxWidget2)QAXFACTORY_END()()
这些类是使用QAxFactory宏从服务器导出的。
要构建示例,您必须首先构建QAxServer库。然后qmake在examples/activeqt/multiple.
该两个简单的Qt控件演示要求你的web浏览器支持ActiveX控件,并启用脚本。
<script language language="javascript">function setColor( form )function setColor( form ){{ Ax1Ax1.fillColor = form.colorEdit.value;;}}function setWidth( form )function setWidth( form ){{ Ax2Ax2.lineWidth = form.widthEdit.value;;}}</script><p />This is one QWidget subclass:<br /><object ID ID="Ax1" CLASSIDCLASSID="CLSID:1D9928BD-4453-4bdd-903D-E525ED17FDE5"CODEBASECODEBASE="http://qt.nokia.com/demos/multipleax.cab">[Object not available! Did you forget to build and register the server</object><br /><form>Fill Color: <input type type="edit" IDID="colorEdit" value value = "red" /><input type type="button" value value = "Set" onClickonClick="setColor(this.form)"setColor(this.form)" /><input type type="button" value value = "Hide" onClickonClick="Ax1.hide()"Ax1.hide()" /><input type type="button" value value = "Show" onClickonClick="Ax1.show()"Ax1.show()" /></form><p />This is another QWidget subclass:<br /><object ID ID="Ax2" CLASSIDCLASSID="CLSID:58139D56-6BE9-4b17-937D-1B1EDEDD5B71"CODEBASECODEBASE="http://qt.nokia.com/demos/multipleax.cab">[Object not available! Did you forget to build and register the server</object><br /><form>Line width: <input type type="edit" IDID="widthEdit" value value = "1" /><input type type="button" value value = "Set" onClickonClick="setWidth(this.form)"setWidth(this.form)" /></form>
====================================================
想要了解或购买Qt正版授权的朋友,欢迎咨询官方客服
Qt技术交流群现已开通,QQ搜索群 “765444821”或者扫描下方二维码即可加入


标签:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!