如何在 QTableView 单元格角落绘制三角形以显示可以从列表中选择的模型数据?
Posted
技术标签:
【中文标题】如何在 QTableView 单元格角落绘制三角形以显示可以从列表中选择的模型数据?【英文标题】:How to draw a triangle in QTableView cell corner to show the model data can be selected from a list? 【发布时间】:2013-10-11 01:40:26 【问题描述】:编辑单元格的默认行为是双击它,但我想向用户展示,他们可以从中选择一个列表,(我的某些列只有一个值,并且不可编辑),所以我打开了持久化编辑器,但是如果行太多,它就太慢了。
所以我转而重新实现 mousePressEvent 并在用户右键单击单元格时显示组合框,但没有任何视觉提示告诉他们可以右键单击哪个单元格。 (我知道也许我可以改变那个单元格的背景颜色)
但是我可以实现这样的目标吗?在单元格的右下方颜色处画一个黑色三角形表示可以右键单击?
喜欢这张来自 excel 的图片吗?
【问题讨论】:
【参考方案1】:您可以使用QStyleItemDelegate,如下所示:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import sys
from PyQt4 import QtCore, QtGui
class StyledItemDelegateTriangle(QtGui.QStyledItemDelegate):
def __init__(self, parent=None):
super(StyledItemDelegateTriangle, self).__init__(parent)
def paint(self, painter, option, index):
super(StyledItemDelegateTriangle, self).paint(painter, option, index)
polygonTriangle = QtGui.QPolygon(3)
polygonTriangle.setPoint(0, QtCore.QPoint(option.rect.x()+5, option.rect.y()))
polygonTriangle.setPoint(1, QtCore.QPoint(option.rect.x(), option.rect.y()))
polygonTriangle.setPoint(2, QtCore.QPoint(option.rect.x(), option.rect.y()+5))
painter.save()
painter.setRenderHint(painter.Antialiasing)
painter.setBrush(QtGui.QBrush(QtGui.QColor(QtCore.Qt.darkGreen)))
painter.setPen(QtGui.QPen(QtGui.QColor(QtCore.Qt.darkGreen)))
painter.drawPolygon(polygonTriangle)
painter.restore()
class MyWindow(QtGui.QTableWidget):
def __init__(self, parent = None):
super(MyWindow, self).__init__(parent)
self.styledItemDelegateTriangle = StyledItemDelegateTriangle(self)
self.setItemDelegate(self.styledItemDelegateTriangle)
self.setRowCount(2)
self.setColumnCount(3)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
app.setApplicationName('MyWindow')
main = MyWindow()
main.resize(333, 111)
main.show()
sys.exit(app.exec_())
【讨论】:
以上是关于如何在 QTableView 单元格角落绘制三角形以显示可以从列表中选择的模型数据?的主要内容,如果未能解决你的问题,请参考以下文章
单击表格单元格后,QtableView 中的某些单元格不会自动重绘
如何在 QTableView 中发出输入单元格和离开单元格的信号