委托中的 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 中消失的主要内容,如果未能解决你的问题,请参考以下文章

QModelIndex 与 QStandardItem互转

无法从 QtGui.QStandardItem 发出信号

Qt,QStandarItemModel:自定义QComboBox上的委托项从模型的实例化器填充其内容

QModelIndex 与 QStandardItem互转

QStyledItemDelegate 和 QStandardItem 防止更改文本,仅启用选择和复制

QStandardItem 编辑后将 unsigned int 转换为 int