2012-11-16 156 views
1

我目前正面臨有關Qt和QTreeView樣式表的問題。 我只是希望在樹中選中的當前項目以粗體書寫。 我做研究之前,在許多論壇上給出的解決方案是:用於QTreeView的Qt StyleSheet

myView->setStyleSheet("QTreeView::item:selected {font: bold;}"); 

但是,這並不爲我工作。我試過QTreeView {font: bold;}哪些作品(每個項目)和QTreeView::item:selected {background-color:red;}作品了。爲什麼字體對所選項目不起作用? 謝謝!

回答

1

很老的問題,但也許有人會覺得它有用。 我有使用Qt 5.3相同的問題。

我發現qt-center的一些信息,它不能通過樣式表完成。

有沒有辦法在QListWidget中更改 選定項的字體粗細(或字體最小)?不,因爲這種字體樣式選項對QWidgets適用 ,因此您可以將字體(或其他類似字體大小) 樣式選項應用於整個QWidget(在此情況下爲QListWidget),而不是 ,以便派生QWidget的特殊行爲QListWidget的選擇 item。

我認爲它也適用於QTreeView,因爲我也無法改變它的風格。 我可以改變邊框,顏色,背景顏色,但沒有關於字體。 首先,我認爲我必須重新實現paintEvent函數,因爲我正在重新實現QTreeView。這並沒有工作。

解決方法解決:

但我發現使用QStyledItemDelegate一些解決方法。 基本上你必須繼承QTreeView,然後子類QStyledItemDelegate。 也許它會工作沒有子QTreeView則,但你必須以某種方式與釣選擇和取消項目的部分信號和通話setItemDelegateForRow和setItemDelegateForColumn(它應該只改變相交單元)

重新實現QStyledItemDelegate ::漆這樣:

QStyledItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const 
{ 
    QStyleOptionViewItemV4 editedOpt = option; 
    editedOpt.font = QFont("Arial", 23, 500); 
    initStyleOption(&editedOpt, index); 
    QStyledItemDelegate::paint(painter, editedOpt, index); 
} 

重新實現QTreeView則::參考selectionChanged(或純QTreeView則和捕捉QItemSelectionModel ::的SelectionChanged):

void CustomTreeView::selectionChanged(const QItemSelection &selected, const QItemSelection &deselected) 
{ 
    foreach(const QModelIndex &index, selected.indexes()) { 
     setItemDelegateForRow(index.row(), new CustomDelegate(this)); 
     setItemDelegateForColumn(index.column(), new CustomDelegate(this)); 
    } 
    foreach(const QModelIndex &index, deselected.indexes()) { 
     setItemDelegateForRow(index.row(), new QStyledItemDelegate(this)); 
     setItemDelegateForColumn(index.column(), new QStyledItemDelegate(this)); 
    } 
}