QAxWidget 妙用


QAxWidget類是一個包裝ActiveX控件的QWidget。
QAxWidget可以實例化為空對象,它應該包含ActiveX控件的名稱,或者使用指向ActiveX控件的現有接口指針。僅使用QAxBase支持的數據類型的ActiveX控件的屬性,方法和事件可用作Qt屬性,插槽和信號。基類QAxBase提供了一個API,可以通過IUnknown指針直接訪問ActiveX。
QAxWidget是一個QWidget,大部分都可以這樣使用,例如它可以在窗口小部件層次結構和布局中組織,也可以充當事件過濾器。標准小部件屬性,例如支持啟用,但它依賴於ActiveX控件來實現對環境屬性的支持,例如調色板或字體。 QAxWidget嘗試提供必要的提示。
但是,您無法重新實現特定於Qt的事件處理程序,如mousePressEvent或keyPressEvent,並期望可靠地調用它們。嵌入式控件完全覆蓋了QAxWidget,通常處理用戶界面本身。使用特定於控件的API(即監聽控件的信號),或使用標准的COM技術,如窗口過程子類。
QAxWidget還從QAxBase繼承了大部分與ActiveX相關的功能,特別是dynamicCall()和querySubObject()。
警告:您可以繼承QAxWidget,但不能在子類中使用Q_OBJECT宏(生成的moc文件將無法編譯),因此您無法添加更多信號,插槽或屬性。此限制是由運行時生成的元對象信息引起的。要解決此問題,請將QAxWidget聚合為QObject子類的成員。

CONFIG  += qaxcontainer

1. 妙用1 支持ActiveX對象

Qt直接支持ActiveX對象,所以在QT中可以直接使用QAxWidget,也就是窗口控件對象。例如word,excel,powerpoint,pdf,flash等。

對於doc,excel,ppt的文檔格式可以直接將文件路徑作為控件進行設置

QAxWidget->setControl(“E:/test.doc”);直接會加載word應用打開doc文檔,其他的微軟格式也是這樣的。如果不是微軟的標准格式的話,那么你需要從控件列表中進行選擇,或則從控件的注冊表中進行選擇。
QString swfPath = qApp->applicationDirPath() + "/swf/player.swf";
widget = new QAxWidget(ui->widget);
widget->setControl(QString::fromUtf8("{d27cdb6e-ae6d-11cf-96b8-444553540000}"));//設置此屬性會初始化COM對象。 先前設置的任何COM對象都將關閉。
widget->dynamicCall("LoadMovie(long,string)", 0, swfPath);

 

2. 妙用2 訪問網頁
#include "mainwindow.h"
#include <QApplication>
#include <QAxWidget>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QAxWidget* webWidget = new QAxWidget;
    //設置ActiveX控件為IEMicrosoft Web Browser
    //設置ActiveX控件的id,最有效的方式就是使用UUID
    //此處的{8856F961-340A-11D0-A96B-00C04FD705A2}就是Microsoft Web Browser控件的UUID
    webWidget->setControl(QString::fromUtf8("{8856F961-340A-11D0-A96B-00C04FD705A2}"));
    webWidget->setObjectName(QString::fromUtf8("webWidget"));//設置控件的名稱
    webWidget->setFocusPolicy(Qt::StrongFocus);//設置控件接收鍵盤焦點的方式:鼠標單擊、Tab鍵
    webWidget->setProperty("DisplayAlerts",false); //不顯示任何警告信息。
    webWidget->setProperty("DisplayScrollBars",true); // 顯示滾動條
    webWidget->show();
    QString sUrl = "https://map.baidu.com/@13523265.31,3641114.64,12z";
    webWidget->dynamicCall("Navigate(const QString&)",sUrl);
    return a.exec();
}

3. 遠程桌面

  1. // ui->axWidget->setControl(QStringLiteral("{8b918b82-7985-4c24-89df-c33ad2bbfbcd}"));
  2. ui->axWidget->setProperty("Server","192.168.31.158"); // 遠程連接 IP
  3. ui->axWidget->setProperty("UserName", "administrator"); // 用戶名
  4. ui->axWidget->setProperty("ClearTextPassword", "123456"); // 用戶密碼
  5. ui->axWidget->setProperty("DesktopWidth", 800); // 指定寬度
  6. ui->axWidget->setProperty("DesktopHeight", 600); // 指定高度
  7. ui->axWidget->dynamicCall("Connect()"); // 連接



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM