彩票走势图

如何用 ActiveQt 写导出类 - QAxFactory

翻译|使用教程|编辑:鲍佳佳|2021-06-21 09:46:49.247|阅读 116 次

概述:Multiple 示例演示了QAxFactory的实现,以使用QAXFACTORY_EXPORT()宏在单个进程内 ActiveX 服务器中提供多个 ActiveX 控件。本例中的 ActiveX 控件是简单的QWidget子类,它们重新实现了QWidget::paintEvent ()。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

相关链接:

Qt是一个跨平台框架,通常用作图形工具包,它不仅创建CLI应用程序中非常有用。而且它也可以在三种主要的台式机操作系统以及移动操作系统(如Symbian,Nokia Belle,Meego Harmattan,MeeGo或BB10)以及嵌入式设备,Android(Necessitas)和iOS的端口上运行。现在我们为你提供了免费的试用版。

下载Qt6最新试用版

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::paintEven ()。

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_NAMESPACE

QAXFACTORY_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="//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="//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”或者扫描下方二维码即可加入


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@cahobeh.cn

文章转载自:

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP