如何用 ActiveQt 写导出类 – QAxFactory

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 标识符,并设置ToSuperClassStockEvents属性以仅公开类本身的 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”或者扫描下方二维码即可加入

如何用 ActiveQt 写导出类 - QAxFactory

如何用 ActiveQt 写导出类 - QAxFactory

标签:

来源:慧都

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年5月18日
下一篇 2021年5月18日

相关推荐

发表回复

登录后才能评论