我希望选定的单元格具有不同的背景颜色。默认情况下,所选单元格中只有一个细的下划线。
我试过这个:
table->setStyleSheet("QTableView {selection-background-color: #0000FF; selection-color: #00FF00;}
但它只会更改指针位于Cell上时显示的Color。指针离开后,我通过table->selectRow(selRow)
选择单元格,只有下划线。可能它在其他平台上看起来不同。
有很多主题相同的主题,但大多数回答是使用上面的样式表。没有任何效果,只有“moseover Color”会改变。
提前致谢,问候 的Matthias
答案 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
将文本颜色设置为自定义颜色。当我有焦点时,它对我来说是白色的,所以当它失去焦点时我只是保持白色。您可以使用您喜欢的任何颜色,或删除该部分以使用默认颜色。