QT的QAxBase類的使用

it_xiangqiang發表於2020-12-02

QAxBase類是一個抽象類,它提供用於初始化和訪問COM物件的API。
QAxBase是不能直接使用的抽象類,並且通過子類QAxObject和QAxWidget例項化。 此類提供了API,以通過其IUnknown實現直接訪問COM物件。 如果COM物件實現IDispatch介面,則該物件的屬性和方法將作為Qt屬性和插槽提供。

connect(buttonBack, SIGNAL(clicked()), webBrowser, SLOT(GoBack()));

可以通過Qt物件模型提供的屬性系統讀寫物件IDispatch實現公開的屬性(兩個子類都是QObject,因此可以使用QObject :: setProperty()和QObject :: property())。 不支援帶有多個引數的屬性。

activeX->setProperty("text", "some text");
  int value = activeX->property("value");

可以使用dynamicCall()直接呼叫物件的IDispatch實現公開的屬性和其他方法的寫函式,也可以間接將其作為連線到訊號的插槽來呼叫。

webBrowser->dynamicCall("GoHome()");

COM物件支援的傳出事件作為標準Qt訊號發出。

connect(webBrowser, SIGNAL(TitleChanged(QString)),
          this, SLOT(setCaption(QString)));

像這樣使用QAxBase API:

  QAxObject object("<CLSID>");

  QString text = object.property("text").toString();
  object.setProperty("font", QFont("Times New Roman", 12));

  connect(this, SIGNAL(clicked(int)), &object, SLOT(showColumn(int)));
  bool ok = object.dynamicCall("addColumn(const QString&)", "Column 1").toBool();

  QList<QVariant> varlist;
  QList<QVariant> parameters;
  parameters << QVariant(varlist);
  int n = object.dynamicCall("fillList(QList<QVariant>&)", parameters).toInt();

  QAxObject *item = object.querySubItem("item(int)", 5);

相關文章