一、源碼下載
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的除錯過程)
以上的內容,基本上就是本篇文章的內容所有內容啦!表格樹控件可以使用起來了。希望可以幫到大家。
![]() |
![]() |
很重要--轉載聲明
-
本站文章無特別說明,皆為原創,版權所有,轉載時請用鏈接的方式,給出原文出處。同時寫上原作者:朝十晚八 or Twowords
-
如要轉載,請原文轉載,如在轉載時修改本文,請事先告知,謝絕在轉載時通過修改本文達到有利於轉載者的目的。