1. 程式人生 > >Qt5中建立及使用自定義外掛遇到的一些問題

Qt5中建立及使用自定義外掛遇到的一些問題

關鍵詞:Qt5、IconEditor、custom plugin、QtCreator、Failed Plugins、自定義外掛

       今天,《C++ GUI Programming with Qt 4》看到了第五章自定義IconEditorPlugin的地方。動手嘗試過程中,遇到一些問題,記錄一下,借前輩之成果,示於後來者。

        開發環境:Win7 64 bit + Qt 5.1.0。

       由於書上是在Qt 4.x講的,而小夥伴們使用Qt 5.1.0有一段時間了。Qt 5 又不是完全相容Qt 4.x(至於Qt 4.x -> Qt 5 需要注意的問題,參見:The Transition from Qt 4.x to Qt 5

或者Porting from Qt 4 to Qt 5),所以這次動手嘗試頗為不順,主要遇到兩個問題:

(1) Qt 5 中開發外掛的方法和Qt 4.x有所不同

        開發環境是Qt 5.x,而書籍是以Qt 4.x講的,的確讓剛接觸Qt的菜鳥(如我)不知所措。有點參考價值的隨書程式碼,也可能不再適用。幸運的是,已經有小夥伴把這本書的隨書程式碼從Qt 4.x移植到Qt 5中來了:Porting source code of the book C++ GUI Programming with Qt 4 from Qt4 to Qt5

        成功解決Qt版本差異帶來的問題後,興沖沖地編譯、連結、生成dll檔案,但是這個dll該怎麼用呢?怎麼能夠在Qt Designer中像使用內建元件一樣使用這個自定義元件呢?這就是下一個問題了。

(2) 在Windows中QtCreator無法識別自定義外掛


        生成dll後,我把它放置到D:\Qt\Qt5.1.0\5.1.0\msvc2012_64_opengl\plugins\designer下,開啟D:\Qt\Qt5.1.0\5.1.0\msvc2012_64_opengl\bin\designer.exe,在左側的元件欄裡找到了IconEditor。撥弄個窗體,拖一個IconEditor,完美!

        接下來,為了瞭解這個IconEditor和上面自定義的IconEditor類是怎麼協同工作的,我開啟QtCreator,建立了一個完整的應用程式。這個程式帶一個對話方塊,在QtCreator中開啟ui檔案,可是發現左側元件欄裡沒有我要的IconEditor元件。

        單獨開啟QtDesigner可以看到,但是在QtCreator中整合的designer介面中卻沒有IconEditor,怎麼回事呢?

        我想,會不會是QtCreator查詢外掛的路徑和QtDesigner不一樣,於是便在Qt安裝目錄中閒逛。別說,還真讓我發現了一個地方:D:\Qt\Qt5.1.0\Tools\QtCreator\bin\plugins\designer。在這個資料夾下,已經有幾個外掛,和D:\Qt\Qt5.1.0\5.1.0\msvc2012_64_opengl\plugins\designer目錄下的一模一樣。難道我建立的自定義外掛也要往這裡複製一份嗎?

        說幹就幹,複製完後,重啟QtCreator,開啟UI設計介面。暈,還沒有。難道是QtCreator載入自定義外掛需要額外的操作?網上搜索, 找到了QtCreator檢測外掛是否載入成功的方法:

        在QtCreator中開啟專案的介面檔案(*.ui),此時QtCreator允許你使用整合的QtDesigner來編輯這個ui檔案,然後開啟選單項“工具->介面編輯器->About Qt Designer plugins...”即可檢視哪些外掛載入成功了,哪些未載入成功(在單獨執行的QtDesigner中,開啟“幫助->關於外掛”選單也可檢視外掛載入成功與否)

        我發現在QtCreator中,自己定義的IconEditor未載入成功(在單獨開啟的QtDesigner中,載入沒有問題)


        這張圖片表示QtCreator找到了外掛,但是未成功載入(注意:要讓QtCreator找到自定義的外掛,必須把它複製到Qt\Qt5.1.0\Tools\QtCreator\bin\plugins\designer目錄下,在Qt\Qt5.1.0\5.1.0\msvc2012_64_opengl\plugins\designer目錄下的只能讓單獨執行的QtDesigner載入)。

        (此處省略9999字,不過搜尋真相的過程是”艱辛“的……)

        最後找到的幾篇完美解決問題:

後記:

        其實本來想寫的比這要長得多(想把參考過的內容整合總結一下)。無奈本性懶散,又加上眼睛不適,便省卻遣詞造句、謀篇佈局之繁瑣,僅僅把比較有價值的參考連結列在文中,靠諸君自己點選閱讀了。

2014-01-25



相關推薦

Qt5建立使用定義外掛遇到的一些問題

關鍵詞:Qt5、IconEditor、custom plugin、QtCreator、Failed Plugins、自定義外掛        今天,《C++ GUI Programming with Qt 4》看到了第五章自定義IconEditorPlugin的地方。動手嘗

try、catch、finallyreturn的執行順序定義異常建立

1.在Java中使用 try/catch語句捕獲異常 說明 throw和throws的區別? 1.作用不同:throw用於程式設計師自行產生並丟擲異常,throws用於宣告該方法內丟擲了異常。 2.使用的位置不同:throw位於方法體內部,可以作為單獨語句使用。throws必須跟在方

Hive建立和呼叫儲存過程定義函式

前面的文章《在Hive中實現儲存過程–HQL/SQL》中介紹瞭如何使用HPL/SQL在Hive中實現儲存過程,執行類似Oracle PL/SQL的功能。 一般的業務場景是資料開發人員開發好一個儲存過程,然後週期性的呼叫,傳入不同的引數即可。 本文繼續介紹如何在Hive中利

C++ MFC添加定義消息映射宏添加消息響應函數

c++ mfc sindsun 反射消息映射宏 下面是我自己在學習C++過程中遇到的問題及解決過程,我把這個共享出來,希望能幫到遇到同樣問題的同胞! 一、添加消息響應函數 afx_msg void OnOwnerDraw(NMHDR * pNotifyStruct, LRESULT* pRes

java使用apk-parser解析apk,獲取manifest的版本號定義變數

apk-parser地址: https://github.com/hsiafan/apk-parser 1.獲取版本號等資訊: try (ApkFile apkFile = new ApkFile(new File(filePath))) { ApkMeta apkMeta

Cordova與現有框架的結合,Cordova外掛使用教程,Cordova定義外掛,框架整合Cordova,將Cordova整合到現有框架

 一、框架整合cordova 將cordova整合到現有框架中 一般cordova工程是通過CMD命令來建立一個工程並新增Android、ios等平臺,這樣的建立方式可以完整的下載開發過程中所需要的的外掛。也是最方便和快捷一種方式。因此我們需要用這種方式將我們現有的框架放入到已建好的cordov

hive定義函式定義json字串解析函式

hive中如何定義自己的函式 寫一個Java 程式,實現想要的函式功能 1.匯入hive安裝目錄的lib目錄的包 2新建一個類繼承 UDF類 3.過載父類中evaluate方法; 4.寫下自己的邏輯 package test; import

OCUITableView之定義cell的使用(2):通過程式碼建立

在使用UITableView做開發時,常常會遇到 系統提供的樣式無法滿足專案需求的情況,這時就需要根據需求來自定義cell。 自定義cell有兩種方式:   · 通過xib自定義cell(適用於cell中子控制元件個數固定、cell樣式統一的結構,例如:商品的列表頁面)

OCUITableView之定義cell的使用(1):通過xib建立

在使用UITableView做開發時,常常會遇到 系統提供的樣式無法滿足專案需求的情況,這時就需要根據需求來自定義cell。 自定義cell有兩種方式:   · 通過xib自定義cell(適用於cell中子控制元件個數固定、cell樣式統一的結構,例如:商品的列表頁面)

用opencv模仿matlab的fspecial()函式建立一個定義空間高斯濾波器模板

模仿matlab裡的fspecial()函式,建立一個自定義空間高斯濾波器模板。 基本原理:二維高斯核函式的基本形式是這樣滴: 通常我們的座標都是x和y整數,要產生一個3x3的濾波器,我們要以中心為基礎取樣,這樣第一個值為(-1,-1),以後依次排序到(1,1)。這樣就可以產生一個mxn

Javascript的函式定義屬性

一.函式 1.函式:將一系列程式碼或者操作行為打包到一起形成的內容就是函式,是一塊有特定功能的程式碼。 2.函式的分類 a.具名函式:有函式名的就是具名函式 function foo(){//foo就是函式的名字,function表示函式的宣告,看不到表現效果

建立Package定義CMakeList.txt

    建立Packages 1、Packages組成       catkin工作區的包必須包含三部分:package.xml、CMakeLists.txt以及每個包單獨的目錄(資料夾)       最簡單的包如下所示的結構: my_package/ CMake

Jquery外掛Thickbox的使用總結定義設定

ThickBox執行需要的檔案 官方下載: Download thickbox.js or thickbox-compressed.js, ThickBox.css, and the loading graphic (loadingAnimation.gif) to your local m

springmvc在處理請求過程出現異常資訊交由異常處理器進行處理,自定義異常處理器可以實現一個系統的異常處理邏輯。為了區別不同的異常通常根據異常型別自定義異常類,這裡我們建立一個自定義系統異常,如果controller、service、dao丟擲此類異常說明是系統預期處理的異常資訊。

springmvc在處理請求過程中出現異常資訊交由異常處理器進行處理,自定義異常處理器可以實現一個系統的異常處理邏輯。 1.1 異常處理思路 系統中異常包括兩類:預期異常和執行時異常RuntimeException,前者通過捕獲異常從而獲取異常資訊,後者主要通過規範程式碼開發、測試通過手段減少執

github建立個人部落格定義域名

什麼是github pages github pages是github提供的免費的存放網頁的服務,有了它,你就可以輕鬆使用靜態網頁構建一個網站。如果你有自己的域名,還可以繫結自己的域名。很期待吧~ 1.首先在github上建立一個倉庫,這步就省略不說

Java併發程式設計四種執行緒池定義執行緒使用教程

引言 通過前面的文章,我們學習了Executor框架中的核心類ThreadPoolExecutor ,對於執行緒池的核心排程機制有了一定的瞭解,並且成功使用ThreadPoolExecutor 建立了執行緒池。 而在Java中,除了ThreadPoolExecutor ,Executor框

在Ueditor 1.4.3定義外掛

1.定義js/ueditor/myCustomize/myCustomizeLine.js UE.registerUI('customizeline',function(editor,uiName){     //建立dialog     var dialog = new

C++堆的使用定義型別排序

簡介 C++中堆(heap)是在vector的基礎上實現的。具體地,是定義了一些方法在vector型別資料上進行操作,包括 - make_heap 建立堆(預設最大堆) - push_heap 加入元素 - pop_heap 刪除元素 - sort_h

iostableview的建立定義cell的封裝

#import "HGYwaitServiceViewController.h" #import "HGYWaitingserveCell.h" @interface HGYwaitServic

vue的路由定義圖示

效果如圖所示: 安裝vue-router: npm install vue-router --save 底部選項卡: 使用的是:MUI中的 tab bar(選項卡) 下載mui:[mui](https://github.com/dcloudio/m