Qt treewidget樣式的自定義(轉)


這個treewidget樣式真是寫得讓人心碎,主因是那個天殺的表頭,真是塊古里古怪的硬骨頭,令人抓狂,一直找不到給表頭設定背景圖的方法,讓我一度決定棄用tree。

后來表頭的屬性找到了,下拉條又找不到。第一次接觸stylesheet,完全是邊做邊學,不知所謂,又不想不做,默認的樣式我就是看不過眼,處女座的人就是比較神經質。​

網上關於treewidget的樣式介紹少之又少,不知道是不是因為大牛們都采用了treeview等其他方法去做了,或者說是tree太簡單,只有我那么弱智還要去網上搜。​

總之,經過2天堅持不懈的泣血努力,總算是把這個控件的樣式完完全全換掉了。​

特此記錄,以資鼓勵。​​

 

——————————————————————————————

樹形列表控件,主要是對“表頭”“列表背景” “下拉條”“鼠標掃動”做處理,以達到自定義效果。​​

不廢話了,直接上代碼。

m_QTreeWidget->setStyleSheet("​​

//列表背景

QTreeWidget{background-image:url(./image/treelistbk.jpg);}\ ​​

//每一項的身高 鼠標掃過 按下的變色

QTreeWidget::item{height:40px;}\

QTreeWidget::item:hover{}\​​

//表頭背景 表頭身高

QHeaderView::section{border-image: url(./image/header-test.png); height:40px;} "

);

列表的表頭,給圖片背景!天知道居然要用Qheaderview!!!天殺的!!!​

 

//下拉條的樣式設置  具體內容 參考上一篇 

http://blog.sina.com.cn/s/blog_8a621fc80102vizs.html

m_QTreeWidget->verticalScrollBar()->setStyleSheet("");​

m_QTreeWidget->horizontalScrollBar()->setStyleSheet("");​

 

完畢。其實很簡單吧。​

但是卻花了很長時間。​

俺寫的第一個stylesheet。呼呼。雖浪費2天時間,人都快瘋掉,但好歹最終成功了。

也算是入門了。

————————————————————————————​

 

以下是我的其他設置,作為一個初學者,都這兩天慢慢琢磨的,留給自己看。

//字體

m_pQTreeWidget->setFont(QFont("Helvetica"));​

//表頭字體 居中 (表內項目的字體居中要去add item的地方進行設置,目前沒找到別的好辦法。。。嚶嚶嚶。。。。)

m_pQTreeWidget->headerItem()->setFont(0,QFont("Helvetica",18,QFont::Bold));

m_pQTreeWidget->headerItem()->setFont(1,QFont("Helvetica",18,QFont::Bold));

m_pQTreeWidget->headerItem()->setTextAlignment(0,Qt::AlignHCenter | Qt::AlignVCenter); ​

m_pQTreeWidget->headerItem()->setTextAlignment(1,Qt::AlignHCenter

Qt::AlignVCenter); ​​

//表頭不許移動,不許點擊,不許排序。。。。哼哼哈。在我地盤的,你就得聽我的!

setHeaderMovable(false);

m_pQTreeWidget->header()->setClickable(false);

m_pQTreeWidget->setFrameShape(QFrame::NoFrame); //設置無邊框這樣才可以自定義treewidget背景圖

 

//表頭可點擊,點擊后可排序

#if 0

//setHeaderHidden(true); //去掉表頭

m_pQTreeWidget->header()->setClickable(true); //點擊頭自動排序

m_pQTreeWidget->setSortingEnabled(true); //用來設置是否可以排序

m_pQTreeWidget->sortItems(0, Qt::AscendingOrder); //id屬性,即第0列,升序排列

#endif​

 ​​

----------------------------------------------------------------------

by the way,整理代碼的時候發現了,有個很變態的地方。​

當這一句setFrameShape(QFrame::NoFrame);若寫在設置橫向滾動條的樣式之前,則橫向滾動條就出不來了,橫向滾動條本來是自動出現的。

(雖然我本來就不想要它出現。但我覺得哦,也許樣式應該寫在最前面。)

http://blog.sina.com.cn/s/blog_8a621fc80102vj09.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM