2011-04-07 276 views
1

我希望選定的單元格具有不同的背景顏色。默認情況下,所選單元格中只有一個細線下劃線。QTableWidget選擇顏色

我已經試過這樣:

table->setStyleSheet("QTableView {selection-background-color: #0000FF; selection-color: #00FF00;} 

但它只是改變了顯示在鼠標指針在單元格顏色。指針離開後,我選擇table->selectRow(selRow)的單元格,只有下劃線。可能它看起來不同於其他plattforms。

有很多主題相同的線程,但大多數答案都是使用上面的樣式表。沒有任何工作,只有「摩西色彩」變化。提前

感謝,問候 馬蒂亞斯

回答

0

您需要使用自定義委託,只要你想他們畫選定的單元格。

看看QAbstractItemView::setItemDelegate()方法和QItemDelegate類。您需要覆蓋QItemDelegate::paint()方法。繪製方法採用QStyleOptionViewItem結構 - 您可以使用它來確定是否選擇了要求繪製的項目。

對於QItemDelegate::paint的Qt文檔具有完全相同的示例代碼。

1
class BackgroundDelegate : public QStyledItemDelegate { 
public: 
    explicit BackgroundDelegate(QObject *parent = 0) 
     : QStyledItemDelegate(parent){} 
    void paint(QPainter *painter, const QStyleOptionViewItem &option, 
      const QModelIndex &index) const { 
    // Fill the background before calling the base class paint 
    // otherwise selected cells would have a white background 
    QVariant background = index.data(Qt::BackgroundRole); 
    if (background.canConvert<QBrush>()) 
     painter->fillRect(option.rect, background.value<QBrush>()); 
    // the comment below makes selection transparent 
    //QStyledItemDelegate::paint(painter, option, index); 
    // To draw a border on selected cells 
    if(option.state & QStyle::State_Selected) { 
     painter->save(); 
     QPen pen(Qt::black, 2, Qt::SolidLine, Qt::SquareCap, Qt::MiterJoin); 
     int w = pen.width()/2; 
     painter->setPen(pen); 
     painter->drawRect(option.rect.adjusted(w,w,-w,-w)); 
     painter->restore(); 
    } 
    } 
}; 

然後 table->setItemDelegateForColumn(2, new BackgroundDelegate(this));

1

這就是我所做的。

stylesheet = "QTableView{selection-background-color: " + highlight + ";" 
stylesheet +=  "selection-color: white; show-decoration-selected: 10}\n" 
stylesheet += "QTableView::item:focus{border: 1px solid yellow;" 
stylesheet +=  "background-color:"+highlight+"}" 

table->setStyleSheet(stylesheet); 

選擇顏色確實選擇了一個項目,而項目焦點將着色應該突出顯示的其餘項目。

這適用於選定的單元格,如具有選定的行。如果你想要「鼠標懸停」的東西,你可能不得不在樣式表中使用「懸停」。希望這可以給你想法。

0
table->setStyleSheet("QTableView:item:selected {background-color: #XXYYZZ; color: #FFFFFF}\n" 
        "QTableView:item:selected:focus {background-color: #3399FF;}") 

遺憾的是似乎沒有成爲一個「nofocus」屬性,所以你只需要設置顏色所有選定的項目,然後覆蓋關注的顏色恢復到默認。 #3399FF是一個顏色選擇器顯示默認高亮背景顏色是爲我的設置,所以我用它。你可以用你喜歡的任何顏色進行替換。

當選擇失去焦點時,color: #FFFFFF將文本顏色設置爲自定義。當我有焦點時,它對我來說是白色的,所以當它失去焦點時,我會將它保持爲白色。您可以使用任何您喜歡的顏色,或者刪除該部分以使用默認設置。