Qt開発ActiveXノート(2):QtはQtによって開発されたActivexコントロールを呼び出します

記事が元の記事である場合は、転載の元のソースを示してください。
この記事のブログアドレス:https//blog.csdn.net/qq21497936/article/details/113789693

今後もプロジェクトやテクノロジーの共有をさらに増やしていきます。お問い合わせはQQ:21497936、WeChat:yangsir198808を追加してください。

Red Fatty(Red Imitation)のブログ投稿:開発技術コレクション(Qt実用技術、Raspberry Pi、3D、OpenCV、OpenGL、ffmpeg、OSG、MCU、ソフトウェアとハ​​ードウェアの組み合わせなどを含む)は継続的に更新されています... (ポータルをクリックしてください)

Qt開発コラム:開発技術

前:「Qt開発ActiveXノート(1):環境設定、基本的な開発プロセス、デモデモ
次:「Qt開発ActiveXノート(3):C#はQtによって開発されたActiveXコントロールを呼び出す


序文

  他のアプリケーションが呼び出すActiveXコントロールを開発するこの章では、Qtが開発したActiveXコントロールに限らず、QtがActiveXコントロールを呼び出す方法について説明します。


デモ

  ここに画像の説明を挿入します


QAxWidget

概要概要

  QAxWidgetクラスは、ActiveXコントロールをラップするQWidgetです。
  QAxWidgetは、ラップするActiveXコントロールの名前、またはActiveXコントロールへの既存のインターフェイスポインタを使用して、空のオブジェクトとしてインスタンス化できます。ActiveXコントロールのプロパティ、メソッド、およびイベントは、QAxBaseでサポートされているデータ型のみを使用し、Qtプロパティ、スロット、およびシグナルとして使用できます。基本クラスQAxBaseは、IUnknownポインターを介してActiveXに直接アクセスできるAPIを提供します。
  QAxWidgetはQWidgetであり、通常はこのように使用できます。たとえば、ウィジェットの階層とレイアウトに編成したり、イベントフィルターとして機能したりできます。有効などの標準ウィジェット属性をサポートしますが、環境属性(パレットやフォントなど)をサポートするためにActiveXコントロールに依存します。QAxWidgetは、必要なヒントを提供しようとします。
  ただし、mousePressEventやkeyPressEventなどのQt固有のイベントハンドラーを再実装して、それらを確実に呼び出すことは期待できません。埋め込みコントロールはQAxWidgetを完全にカバーし、通常はユーザーインターフェイス自体を処理します。コントロール固有のAPIを使用する(つまり、コントロールシグナルをリッスンする)か、ウィンドウプロシージャのサブクラス化などの標準のCOM手法を使用します。
  QAxWidgetは、ActiveXに関連するほとんどの関数(特にdynamicCall()とquerySubObject())もQAxBaseから継承します。
  警告:QAxWidgetはサブクラス化できますが、Q_OBJECTマクロをサブクラスで使用することはできません(生成されたmocファイルはコンパイルされません)。そのため、シグナル、スロット、または属性を追加できません。この制限は、実行時に生成されるメタオブジェクト情報が原因で発生します。この問題を解決するには、QAxWidgetをQObjectサブクラスのメンバーとして集約します。


QtはActiveXメソッドを呼び出します

ステップ1:ActiveXコントロールを登録する

  実行する前に登録し、Qtに付属のidcを使用して登録します。

idc -regserver activeHelloWorldDemo.dll

  ここに画像の説明を挿入します

ステップ2:activeQtコントロールのclsidを確認します

  以下に示すように、それを確認し、レジストリを開き、clsidを確認するために検索します。
  ここに画像の説明を挿入します

"2F12BFB8-137D-4DC2-9A93-634EFE5A6DFC"

ステップ3:QAxWidgetを使用して

QAxWidget *pAxWidget = new QAxWidget();
pAxWidget->resize(400, 320);
pAxWidget->setControl("2F12BFB8-137D-4DC2-9A93-634EFE5A6DFC");
pAxWidget->show();

ソースコード

#include <QApplication>
#include <QAxWidget>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QAxWidget *pAxWidget = new QAxWidget();
    pAxWidget->resize(400, 320);
    pAxWidget->setControl("2F12BFB8-137D-4DC2-9A93-634EFE5A6DFC");
    pAxWidget->show();

    return a.exec();
}

前:「Qt開発ActiveXノート(1):環境設定、基本的な開発プロセス、デモデモ
次:「Qt開発ActiveXノート(3):C#はQtによって開発されたActiveXコントロールを呼び出す

おすすめ

転載: blog.csdn.net/qq21497936/article/details/113789693