QT控制选中item的文字颜色(HighlightedText) 和 QT表格交替背景色

 

出处:http://blog.csdn.net/piaopiaolanghua/archive/2010/10/12/5936145.aspx

 

默认的情况下,QTableView,QTableWidget等控件,当item选中后其背景色为蓝色的,文字颜色(前景色)为白色的,如图:

        

    如果我们想动态的更改item的前景色(例如值大于零显示红色,小于零显示绿色),并且选中后文字颜色不变(这个是我想实现的,其实就是模仿一般的股票价格图表),怎么办呢? 首先在添加或者修改item的时候,可以使用:

 model->item(row, column)->setForeground(QBrush(QColor(255, 0, 0)));  //把表格的item的文字颜色设置为红色

但是只这样还是不够的,这样只能保证在不选中的情况下显示为红色, 若不做其他设置,选中后item的颜色照样变成白色的了。

    对此我找到了使用代理的方法,使选中后的文字颜色和选中前的文字颜色一致(也可以灵活修改),效果如下图,代码随后。

       //黄色的那行为选中

 

 

  1. //委托(代理)  
  2. class ItemDelegate : public QItemDelegate  
  3. {  
  4.     Q_OBJECT  
  5. public:  
  6.     ItemDelegate()  
  7.     {  
  8.     }  
  9.     void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const  
  10.     {  
  11.         QStyleOptionViewItem  viewOption(option);  
  12.         //高亮显示与普通显示时的前景色一致(即选中行和为选中时候的文字颜色一样)  
  13.         viewOption.palette.setColor(QPalette::HighlightedText, index.data(Qt::ForegroundRole).value());  
  14.         QItemDelegate::paint(painter, viewOption, index);  
  15.     }  
  16. };  

 

 

 

 

  1. view = new QTableView;  
  2. model = new QStandardItemModel;  
  3. view->setModel(model);  
  4. view->setItemDelegate(new ItemDelegate);  

 

 

  1. if (strList[2].toDouble() >= strList[3].toDouble())  
  2.     model->item(row, 2)->setForeground(QBrush(QColor(255, 0, 0)));  
  3. else  
  4.     model->item(row, 2)->setForeground(QBrush(QColor(0, 127, 0)));  
  5. if (strList[4].toDouble() >= strList[3].toDouble())  
  6.     model->item(row, 4)->setForeground(QBrush(QColor(255, 0, 0)));  
  7. else  
  8.     model->item(row, 4)->setForeground(QBrush(QColor(0, 127, 0))); 

 

 

 


 

使用样式表自定义QT表格交替背景色

 

 

关键字: Qt交替背景色; Qt样式表;alternate;alternate-background-color

      默认情况下,QTableView、QTableWidget以及QListView都可以通过设置setAlternatingRowColors ( bool enable ),来决定是否使用交替的背景色。

     默认的交替背景色为灰色的,比较单调。但可以通过设置样式alternate-background-color来更改,如

    setStyleSheet("alternate-background-color: rgb(170, 255, 255);"); 但是这样只能修改偶数行的背景色,而奇数行并没有改变。

    今天在看assistant时,看到下面得到启发:

qthelp://com.trolltech.qt.451/qdoc/stylesheet-examples.html#customizing-qlistvie

QListView::item:alternate { background: #EEEEEE;}

 

    尝试了一下找到了自定义表格交替背景色方法,如下样式表代码所示:

 QTableView::item:alternate:!selected, QTableWidget::item:alternate:!selected, QListView::item:alternate:!selected { background: lightYellow; } QTableView::item:!alternate:!selected, QTableWidget::item:!alternate:!selected, QListView::item:!alternate:!selected { background: lightBlue; }

 

效果如下图:

====================================增加====================================

后来发现另外一个更好用的方法:

 

QTableView

{

background-color: rgb(255, 255, 245); 

alternate-background-color: rgb(245, 245, 245);

}

 


 

 

你可能感兴趣的:(Qt)