QTableWidget选择颜色

时间:2011-04-07 21:11:33

标签: qt qtablewidget

我希望选定的单元格具有不同的背景颜色。默认情况下,所选单元格中只有一个细的下划线。

我试过这个:

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

但它只会更改指针位于Cell上时显示的Color。指针离开后,我通过table->selectRow(selRow)选择单元格,只有下划线。可能它在其他平台上看起来不同。

有很多主题相同的主题,但大多数回答是使用上面的样式表。没有任何效果,只有“moseover Color”会改变。

提前致谢,问候 的Matthias

4 个答案:

答案 0 :(得分: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 :(得分: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);

选择颜色会选择一个项目,而项目焦点将为应突出显示的其他项目着色。

这适用于所选单元格,例如具有选定行。如果你想要一些东西用于&#34;鼠标悬停&#34;你可能不得不使用&#34; hover&#34;在样式表中。希望这可以给你一些想法。

答案 2 :(得分:0)

您需要使用自定义委托来根据需要绘制选定的单元格。

查看QAbstractItemView::setItemDelegate()方法和QItemDelegate类。您需要覆盖QItemDelegate::paint()方法。 paint方法采用QStyleOptionViewItem结构 - 您可以使用它来确定是否选择了要求绘制的项目。

QItemDelegate::paint的Qt文档包含完全相同的示例代码。

答案 3 :(得分:0)

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

不幸的是,似乎没有“nofocus”属性,因此您只需为所有选定项目设置颜色,然后将聚焦颜色覆盖回默认值。 #3399FF是颜色选择器显示的默认高亮背景颜色是我的设置,所以我使用它。您可以用您喜欢的任何颜色替换。

当选择失去焦点时,color: #FFFFFF将文本颜色设置为自定义颜色。当我有焦点时,它对我来说是白色的,所以当它失去焦点时我只是保持白色。您可以使用您喜欢的任何颜色,或删除该部分以使用默认颜色。