天天看點

Qt ActiveX 避坑(必坑)指南(二)

接着說寫Qt ActiveX,哎說不盡的心酸,流不盡的淚啊。。說真的千萬别用Ocx,用Ocx會掉進何種坑,不解釋,自己來看下面的問題和方解決方法,還有一些問題無法解決,知道的大神給留個言。非常感謝。

一、 Qt ActiveX 設計坑

  1. Ocx需要單獨彈窗問題:

    Ocx需要單獨彈窗需要的幾個基本接口:顯示,關閉,移動,視窗大小重新設定。其他接口自己添加。

  2. 使用日志問題:

    一個程式中多個Ocx使用Qt日志重定向到檔案qInstallMessageHandler,多次使用qInstallMessageHandler時會出現意料之外的錯誤,日志混亂,一個應用程式隻使用一個Qt的日志,隻會對最後一個qInstallMessageHandler生效。

    暫時無法解決,需要隻能自己自己重新寫個日之類,寫檔案,不用Qt的日志功能。

二、 Qt ActiveX 使用技術坑

  1. Qt建立OCX編譯報錯:

    1> LINK : fatal error LNK1117: 選項“VERSION:1.0.0”中的文法錯誤

    解決辦法:右鍵選擇項目->屬性->連結器->正常,将頁面中的版本1.0.0選擇從父 級或項目預設設定繼承。重新編譯通過。

    Qt ActiveX 避坑(必坑)指南(二)
  2. Ocx建立包含使用另外的Ocx,使用VS2015建立同時使用AxContainer和AxServer,隻會加載一個子產品問題:

    VS2015建立Qt ActiveX工程,選擇ActiveQt Server輸入名稱和路徑,下一步選擇對應子產品,并添加ActiveQt container選擇建立之後。

    Qt ActiveX 避坑(必坑)指南(二)

    會存在問題,右鍵項目Qt Project Setting,選擇Qt Modules檢視ActiveQt和

    ActiveQt server都是勾選上的。

    Qt ActiveX 避坑(必坑)指南(二)
    再檢視All Qt Libs頁面,AxContainer和AxServer子產品隻勾選上了AxContainer,AxServer并沒有勾選上。檢視依賴項,确實Qt5AxServer.lib沒有添加上。
    Qt ActiveX 避坑(必坑)指南(二)
    解決辦法:多次在Qt Project Setting中,重新勾選上ActiveQt和ActiveQt server點選确定再檢視All Qt Libs,如果還是沒有加入,就多次重複之前的操作,多次後可以加載兩個子產品。
  3. Qt 生成Ocx後,供MFC調用:

    插入Ocx生成接口檔案時,編譯出現QRect錯誤。錯誤定位在QRect GetnormalGeometry()中QRect未聲明,這個是QRect轉換CRect失敗。

    Qt ActiveX 避坑(必坑)指南(二)
    解決方法:直接改代碼,将QRect改為CRect後編譯通過。
  4. Qt 生成Ocx中,界面同時存在Combobox和另外的Ocx,下拉表位置出現bug

    在Qt 生成Ocx中,界面同時存在Combobox和另外的Ocx,使用時Combobox的下拉清單位置會出現問題,下拉清單出現在螢幕左上角位置。

    Qt内部機制問題暫時無法解決。規避下。

  5. Qt生成Ocx使用後,接口未變,但資源檔案發生改變,OCX需要重新加載到程式中,否則資源檔案樣式表加載不上。
  6. Qt生成Ocx時編譯報錯idl檔案生成失敗:

    原因MIDL Compiler路徑找不到,路徑錯誤問題,造成原因可能是挪動工程檔案目錄,造成緩存的路徑可能失效,

    解決辦法:删除所有檔案,重新下載下傳代碼後成功編譯。或者删除VS自動生成的.db檔案進行嘗試。

  7. Qt生成Ocx内嵌另外一個FoxitOcx控件,MFC調用,特定情況下,在關閉銷毀窗體時崩潰,崩潰到Qt5Core中,

    暫時未找到問題原因。

    歡迎各位大神交流讨論

Qt OCX問題解決:

1.使用Qt ActiveX生成Ocx 避坑指南(一)

2.Qt ActiveX 避坑(必坑)指南(二)

繼續閱讀