委托中的 QStandardItem setBackground 使网格在 tableView 中消失
Posted
技术标签:
【中文标题】委托中的 QStandardItem setBackground 使网格在 tableView 中消失【英文标题】:QStandardItem setBackground in delegate makes grid disappears in tableView 【发布时间】:2017-12-11 04:57:41 【问题描述】:我正在使用委托在 tableView 中将一个单元格的背景设置为蓝色。代码如下:
void Delegate::setModelData(some parameters)
QStandardItem *item = model->item(modelIndex);
item->setBackground(QBrush(Qt::blue));
item->setText("hello")
-
在这个序列中,setBackground在setText之前,文本不会显示。如果我改变序列,文本可以显示。
如果我以这种方式更改背景,表格的网格线会消失,如下所示:
虽然不是很清楚(蓝色背景),但您仍然可以在最后一列看到,没有网格线来分隔单元格。
能否请您告诉我这两个问题有什么问题,以及如何解决它们?非常感谢您。
【问题讨论】:
如果您希望我们帮助您,您必须提供minimal reproducible example 为什么需要自定义委托来设置单元格的背景颜色? 【参考方案1】:setModelData() 用于保存数据的地方形成您的自定义编辑器以进行建模。您应该在paint() 虚函数中设置单元格绘图:
void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
// Your manipulation with QPainter and QStyleOptionViewItem
QStyledItemDelegate::paint(painter, &option, &index);
你应该改变QStyleOptionViewItem::backgroundBrush
【讨论】:
以上是关于委托中的 QStandardItem setBackground 使网格在 tableView 中消失的主要内容,如果未能解决你的问题,请参考以下文章
Qt,QStandarItemModel:自定义QComboBox上的委托项从模型的实例化器填充其内容