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