簡単な例(ActiveQt)
簡単な例では、QAxBindable とQAxFactory の使い方を説明します。
この単純な例では、QAxBindable::requestPropertyChange ()とQAxBindable::propertyChanged ()、QAXFACTORY_BEGIN()
、QAXCLASS()
、QAXFACTORY_END()
マクロによるQAxFactory の使用を示します。
この例のActiveXコントロールは、QSlider 、QLCDNumber 、QLineEdit を持つレイアウトされたQWidget です。スライダーとライン編集の値を変更し、プロパティの変更を通知するためのシグナル/スロット/プロパティ・インターフェイスを提供します。
この例の ActiveX の Qt 実装は次のとおりです。
class QSimpleAX : public QWidget, public QAxBindable { Q_OBJECT Q_CLASSINFO("ClassID", "{DF16845C-92CD-4AAB-A982-EB9840E74669}") Q_CLASSINFO("InterfaceID", "{616F620B-91C5-4410-A74E-6B81C76FFFE0}") Q_CLASSINFO("EventsID", "{E1816BBA-BF5D-4A31-9855-D6BA432055FF}") Q_PROPERTY(QString text READ text WRITE setText) Q_PROPERTY(int value READ value WRITE setValue) public: explicit QSimpleAX(QWidget *parent = nullptr) : QWidget(parent) { QVBoxLayout *vbox = new QVBoxLayout(this); m_slider = new QSlider(Qt::Horizontal, this); m_LCD = new QLCDNumber(3, this); m_edit = new QLineEdit(this); connect(m_slider, &QAbstractSlider::valueChanged, this, &QSimpleAX::setValue); connect(m_edit, &QLineEdit::textChanged, this, &QSimpleAX::setText); vbox->addWidget(m_slider); vbox->addWidget(m_LCD); vbox->addWidget(m_edit); } QString text() const { return m_edit->text(); } int value() const { return m_slider->value(); } signals: void someSignal(); void valueChanged(int); void textChanged(const QString&); public slots: void setText(const QString &string) { if (!requestPropertyChange("text")) return; QSignalBlocker blocker(m_edit); m_edit->setText(string); emit someSignal(); emit textChanged(string); propertyChanged("text"); } void about() { QMessageBox::information( this, "About QSimpleAX", "This is a Qt widget, and this slot has been\n" "called through ActiveX/OLE automation!" ); } void setValue(int i) { if (!requestPropertyChange("value")) return; QSignalBlocker blocker(m_slider); m_slider->setValue(i); m_LCD->display(i); emit valueChanged(i); propertyChanged("value"); } private: QSlider *m_slider; QLCDNumber *m_LCD; QLineEdit *m_edit; };
コントロールはデフォルトのQAxFactory
QAXFACTORY_BEGIN( "{EC08F8FC-2754-47AB-8EFE-56A54057F34E}", // type library ID "{A095BA0C-224F-4933-A458-2DD7F6B85D8F}") // application ID QAXCLASS(QSimpleAX) QAXFACTORY_END()
このサンプルをビルドするには、まずQAxServer ライブラリをビルドする必要があります。その後、examples/activeqt/simple
で qmake と make ツールを実行してください。
このデモでは、WebBrowserがActiveXコントロールをサポートし、スクリプトが有効になっている必要があります。
シンプルなActiveXコントロールは、<object>
タグを使って埋め込まれます。
<object ID="QSimpleAX" CLASSID="CLSID:DF16845C-92CD-4AAB-A982-EB9840E74669" CODEBASE="http://qt.nokia.com/demos/simpleax.cab"> <PARAM NAME="text" VALUE="A simple control" /> <PARAM NAME="value" VALUE="1" /> [Object not available! Did you forget to build and register the server?] </object>
シンプルなHTMLボタンが、ActiveQtのabout()スロットに接続されています。
<FORM> <INPUT TYPE="BUTTON" VALUE="About..." onClick="QSimpleAX.about()" /> </FORM>
2番目のActiveXコントロール(標準のカレンダー・コントロール)がインスタンス化されています。
<object ID="Calendar" CLASSID="CLSID:8E27C92B-1264-101C-8A2F-040224009C02"> [Standard Calendar control not available!] <PARAM NAME="day" VALUE="1" /> </object>
ActiveXコントロールからのイベントは、Visual Basic ScriptとJavaScriptの両方を使用して処理されます。
<SCRIPT LANGUAGE="VBScript"> Sub Calendar_Click() MsgBox( "Calendar Clicked!" ) End Sub Sub QSimpleAX_TextChanged( str ) document.title = str End Sub </SCRIPT> <SCRIPT LANGUAGE="JavaScript"> function QSimpleAX::ValueChanged( Newvalue ) { Calendar.Day = Newvalue; } </SCRIPT>
©2024 The Qt Company Ltd. 本書に含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。