paint 清除 qtableview 中的数据

Posted

技术标签:

【中文标题】paint 清除 qtableview 中的数据【英文标题】:paint clears the data in qtableview 【发布时间】:2016-05-04 13:57:05 【问题描述】:

我必须在 QTableView 中显示数据,我有一个包含数据的模型,但我将 QAbstractProxyModel 子类化以转置模型中的数据,此外,我只需要 QTableView 中的一个按钮,这可以通过子类化 QItemDelegate 来实现, 现在的问题是当我设置 view->setItemDelegate(MyItemDelegate)(for the pushbutton); 视图->setModel(myModel);视图->显示(); ...在委托 QItemDelegate 时,我只找到了我在绘制方法中绘制的按钮。 我搜索并发现我需要 setModelData() 和 setEditorData() 来设置 myModel 中的值。但我不知道它是否正确,如果它是我如何 setdata()....提前谢谢

PS:- 当我尝试查看时->setModel(MyModel);视图->显示();没有 setItemDelegate...我可以在 QTableView 中看到数据...但是在委派后我看不到数据...所有这些痛苦只是为了 QTableView 中的 QPushButton

【问题讨论】:

【参考方案1】:

想法是添加 QItemDelegate::paint(painter,option,index);在我绘制按钮的派生类的paint方法中。添加上面这行代码确保先绘制表格,然后在绘制的表格上方绘制。

所以,解决方案看起来像

void PushButtonDelegate::paint(QPainter *painter,const QStyleOptionViewItem &option, const QModelIndex &index) const

QItemDelegate::paint(painter,option,index);

//使用drawcontrol()绘制我的按钮;

如果我不这样做,我会丢失我的数据。当您了解绘画的工作原理但不容易实现时,这很明显...花了我几个小时

【讨论】:

以上是关于paint 清除 qtableview 中的数据的主要内容,如果未能解决你的问题,请参考以下文章

如何清除 QTableView

Qt QTableView paint() 事件无限期交付,消耗 1 个 CPU 内核的 100%

QAbstractTableModel 编辑而不清除单元格中的先前数据

QTableView:如何将鼠标悬停在整行上?

清除队列中的所有项目

QTableView,设置单元格的字体和背景颜色