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 中的数据的主要内容,如果未能解决你的问题,请参考以下文章
Qt QTableView paint() 事件无限期交付,消耗 1 个 CPU 内核的 100%