Пример "Multiple" (ActiveQt)
Файлы:
Пример "Multiple" демонстрирует реализацию QAxFactory для обеспечения множества элементов управления ActiveX в одном процессе сервера ActiveX используя макрос QAXFACTORY_EXPORT(). Элементы управления 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:
QAxWidget1(QWidget *parent = 0)
: QWidget(parent), fill_color(Qt::red)
{
}
QColor fillColor() const
{
return fill_color;
}
void setFillColor(const QColor &fc)
{
fill_color = fc;
repaint();
}
protected:
void paintEvent(QPaintEvent *e)
{
QPainter paint(this);
QRect r = rect();
r.adjust(10, 10, -10, -10);
paint.fillRect(r, fill_color);
}
private:
QColor fill_color;
};
Первый элемент управления рисует залитый прямоугольник. Цвет заливки показан как свойство. 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:
QAxWidget2(QWidget *parent = 0)
: QWidget(parent), line_width( 1 )
{
}
int lineWidth() const
{
return line_width;
}
void setLineWidth( int lw )
{
line_width = lw;
repaint();
}
protected:
void paintEvent( QPaintEvent *e )
{
QPainter paint( this );
QPen pen = paint.pen();
pen.setWidth( line_width );
paint.setPen( pen );
QRect r = rect();
r.adjust( 10, 10, -10, -10 );
paint.drawEllipse( r );
}
private:
int line_width;
};
Второй элемент управления рисует окружность. Ширина линии показана как свойство. Q_CLASSINFO() используется для указания идентификаторов COM, а также для установки атрибутов ToSuperClass и StockEvents чтобы показать только API самого класса, а также чтобы добавить стандартные события COM к элементу управления ActiveX.
#include "ax1.h"
#include "ax2.h"
#include <QAxFactory>
QT_USE_NAMESPACE
QAXFACTORY_BEGIN("{98DE28B6-6CD3-4e08-B9FA-3D1DB43F1D2F}", "{05828915-AD1C-47ab-AB96-D6AD1E25F0E2}")
QAXCLASS(QAxWidget1)
QAXCLASS(QAxWidget2)
QAXFACTORY_END()
Классы экспортируются с сервера используя макрос QAxFactory.
Чтобы собрать пример вы должны сначала собрать библиотеку QAxServer. Затем запустите qmake и ваш make-инструмент в каталоге examples/activeqt/multiple.
Демонстрационная программа требует поддержки элементов управления ActiveX в вашем веб-браузере, а также разрешения выполнения сценариев.
<script language="javascript">
function setColor( form )
{
Ax1.fillColor = form.colorEdit.value;
}
function setWidth( form )
{
Ax2.lineWidth = form.widthEdit.value;
}
</script>
<p />
This is one QWidget subclass:<br />
<object ID="Ax1" CLASSID="CLSID:1D9928BD-4453-4bdd-903D-E525ED17FDE5"
CODEBASE="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="edit" ID="colorEdit" value = "red" />
<input type="button" value = "Set" onClick="setColor(this.form)" />
<input type="button" value = "Hide" onClick="Ax1.hide()" />
<input type="button" value = "Show" onClick="Ax1.show()" />
</form>
<p />
This is another QWidget subclass:<br />
<object ID="Ax2" CLASSID="CLSID:58139D56-6BE9-4b17-937D-1B1EDEDD5B71"
CODEBASE="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="edit" ID="widthEdit" value = "1" />
<input type="button" value = "Set" onClick="setWidth(this.form)" />
</form>
Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies) |
Торговые марки |
Qt 4.5.3 |
|