[TOC] 一、源碼下載 Qt庫封裝了很多很控制項,種類也比較多,其中容器控制項包括:表格、樹和列表。 使用過QtDesigner的同學應該都知道,這個工具中有一個屬性編輯器,是一個表格樹控制項,就像vs中控制項屬性面板一樣。 今天我們就來介紹一款使用QTreeWidget封裝的表格樹控制項QtTreePro ...
目錄
一、源碼下載
Qt庫封裝了很多很控制項,種類也比較多,其中容器控制項包括:表格、樹和列表。
使用過QtDesigner的同學應該都知道,這個工具中有一個屬性編輯器,是一個表格樹控制項,就像vs中控制項屬性面板一樣。
今天我們就來介紹一款使用QTreeWidget封裝的表格樹控制項QtTreePropertyBrowser,這個控制項現在還沒有被Qt正式的收錄。
要想使用這個QtTreePropertyBrowser庫,首先我們需要去github上去下載源碼,然後自行編譯。
二、代碼編譯
如下圖所示,是github上的代碼提交記錄,仔細看提交時間,距離現在已經有9年過去了。
因此這個代碼編譯起來還是比較費勁的,如果覺著編譯費勁,也可以直接下載別人已經編譯好了的QtPropertyBrowser庫,或者留下郵箱我發送我編譯好的demo。這裡我自己也是想熟悉這個庫,並且使用起來,因此自己決定對這個庫中的語法錯誤進行解決,最後順利到達效果。
源碼升級過程中主要參考了Qt5.4.2編譯 qtpropertybrowser-2.51(從4修改到5的除錯過程)這篇文章,還有我自己處理的幾個小問題
使用vs中的qt-addin插件直接打開pro文件,打開工程後,如下圖所示。
接下來是修改編譯錯誤,大概有如下9個錯誤類型,大多都數都可以直接使用全局替換。
1、intersect函數替換為intersected
//舊代碼
area.intersect(QRect(0, 0, width(), height()));
//新代碼
area.intersected(QRect(0, 0, width(), height()));
2、移除UnicodeUTF8
移除QApplication::UnicodeUTF8,別忘記移除這個參數之前的逗號,很重要,要不然編譯不過。
3、QtGui模塊拆分
Qt4到Qt5有一個很大的變化,就是很多QtGui模塊中的東西被拆分到了QtWidgets模塊中。
這裡我們使用vs打開工程後,編譯時提示我們模塊找不到的話,需要把很多的QtGui改成QtWidgets,就像下麵這樣
//舊代碼
#include <QtGui/QWidget>
//新代碼
#include <QtWidgets/QWidget>
4、Q_TYPENAME錯誤
全局替換,直接把Q_TYPENAME替換成typename
5、qVariantValue錯誤
全局替換,直接把qVariantValue()替換成qvariant_cast()
6、qFindChildren錯誤
Qt5時qFindChildren()被廢除了,可以用findChildren()替代
//舊代碼
QList<QtIntPropertyManager *> intPropertyManagers = qFindChildren<QtIntPropertyManager *>(manager);
//新代碼
QList<QtIntPropertyManager *> intPropertyManagers = manager->findChildren<QtIntPropertyManager *>();
7、setMovable移除
//舊代碼
setMovable()
//新代碼
setSectionsMovable()
8、setMovable移除
//舊代碼
setResizeMode()
//新代碼
setSectionResizeMode()
9、添加QtWidgets模塊
一定要添加上QtWidgets模塊,如下圖所示,每個工程都需要這樣設置
三、運行結果
程式編譯完成之後,會生成如下幾個可執行程式。
嘗試運行其中的simple.exe可執行程式,結果如下,看起來是不是還不錯。
四、參考文章
Qt5.4.2編譯 qtpropertybrowser-2.51(從4修改到5的除錯過程)
以上的內容,基本上就是本篇文章的內容所有內容啦!表格樹控制項可以使用起來了。希望可以幫到大家。
後續我會把這個控制項封裝起來,封裝成一個類似於QTreeWidget的控制項,讓其他人使用起來更容易
很重要--轉載聲明
本站文章無特別說明,皆為原創,版權所有,轉載時請用鏈接的方式,給出原文出處。同時寫上原作者:朝十晚八 or Twowords
如要轉載,請原文轉載,如在轉載時修改本文,請事先告知,謝絕在轉載時通過修改本文達到有利於轉載者的目的。