- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我为 QTableView
的一列设置了自定义项委托(delegate)。在某些情况下,我需要将其删除(即设置默认项目委托(delegate))。但是QT好像不允许这样。即使在设置新委托(delegate)后,也会使用旧委托(delegate)。根据 QItemDelegate
的 QT 文档,所有处理都应在同一个委托(delegate)中完成,但这可能会带来性能问题。有什么方法可以删除/重置为默认 QTableView
的项目委托(delegate)。
最佳答案
我在 PyQt5 中尝试过(抱歉,我不会写 C++)。我可以将标准 itemGelegate 设置为 View ,然后将自定义 itemDelegate 设置为一列。通过使用“已点击”信号,我可以用此列的标准 itemDelegate 替换自定义委托(delegate),反之亦然。
这是我的代码,也许它有帮助:
import sys
from PyQt5 import QtGui, QtCore, QtWidgets
class MyDelegate(QtWidgets.QStyledItemDelegate):
def __init__(self):
QtWidgets.QStyledItemDelegate.__init__(self)
self.AlignmentFlag = QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter
self.abstand = 2
def paint(self, painter, item, index):
rahmen = item.rect.adjusted(self.abstand, self.abstand, -self.abstand, -self.abstand)
eintrag = index.data()
painter.save()
painter.drawText(rahmen,self.AlignmentFlag, eintrag)
painter.restore()
class MyModel(QtCore.QAbstractTableModel):
def __init__(self,):
QtCore.QAbstractTableModel.__init__(self)
self.items = [['a0','a1','a2','a3','a4'],['b0','b1','b2','b3','b4'],['c0','c1','c2','c3','c4']]
def columnCount(self,items):
cc = len(self.items[0])
return cc
def rowCount(self,items):
rc = len(self.items)
return rc
def data(self, index, role=2):
return self.items[index.row()][index.column()]
class MyWidget(QtWidgets.QTableView):
def __init__(self):
QtWidgets.QTableView.__init__(self)
self.setModel(MyModel())
self.setGeometry(200,200,530,120)
self.delegate_1 = MyDelegate()
self.delegate_2 = QtWidgets.QStyledItemDelegate()
self.setItemDelegate(self.delegate_2)
self.setItemDelegateForColumn(0,self.delegate_1)
self.clicked.connect(self.changeDelegate)
def changeDelegate(self,index):
if index.column() == 0:
delegate_new = self.delegate_2 if self.itemDelegateForColumn(index.column()) == self.delegate_1 else self.delegate_1
self.setItemDelegateForColumn(index.column(),delegate_new)
else:
pass
app = QtWidgets.QApplication(sys.argv)
widget = MyWidget()
widget.show()
sys.exit(app.exec_())
关于c++ - 从 QTableView 中移除 QItemDelegate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29250020/
我有 QListView 与 QItemDelegate 的自定义实现。 MyItemDelegate 重新实现 createEditor() 以显示自定义小部件。小部件的大小取决于内容。 默认情况下
我正在尝试使用我在 Google 中找到的简单示例代码。 一切正常,但一旦我为列设置了委托(delegate),它就会显示错误。 这是 line我将“Bank”字符串设置为两行和 comboboxde
我有一个 QTreeview 并且我使用了这个样式表 QTreeView#treeView::item:selected:active { background: qlineargradien
我的 QTableView 和 QItemDelegate 类有问题。对于一列,我的代表创建了一个简单的组合框,一切正常。对于我的第二列,我需要一个在单个小部件中具有两个组合框的小部件。 我在我的 Q
我实现了以下委托(delegate),以在 QTableView 中提供组合框。用例是用等效的文本替换通常对用户无意义的列(键)(例如数字 ID)。 下面的代码片段有效(也用于保存正确的值),但它存在
我在项目上工作它就像 Qt 示例项目中的 SpinBoxDelegate 但我必须自定义它,我的意思是在 TableView 的第二列和第三列中有不同的小部件(文本框)而不是 spainBox。你有什
我有一个 QTreeView 和它的 QItemDelegate。QTreeView 有很多项。 目标: 如果我选择这些项目中的一个,那么不仅选择的项目而且其他一些(在我的其他条件之后)项目也必须重新
使用 QT4 的最佳方式是什么 QItemDelegate在 View 中显示图像的缩略图? 具体来说,当从非常大的图像文件 (> 500MB) 生成 pixmaps 时,如何阻止项目委托(deleg
Qt 5.5 有一个虚拟方法来为编辑模式定义一个自定义小部件: QWidget *createEditor(QWidget *parent,const QStyleOptionViewItem & o
我正在使用 QItemDelegate 制作表格。我使用 paint(..) 方法绘制委托(delegate)项目,使其在退出编辑模式时看起来相同,但我还需要在项目被选中与否时以不同方式绘制项目,并且
如何制作一个自定义的 QItemDelegate 就像所附的图片一样。这是一个 QTreeView。我要自定义的最后一个元素并添加一个 QItemDelegate 现在我只有绿色的 separator
我有一个 QTableView 显示来自自定义模型的数据。我有一个 QItemDelegate 用于每个单元格的版本。 View 的一列有一个由 QLineEdit 和 QCheckBox 组成的自定
我创建了一个自定义项目委托(delegate),它允许用户编辑文件路径列表: 我通过自定义类 DirEdit 实现了这一点。现在选定的路径已提交,当用户按下 enter 时编辑器关闭,但我想添加两种情
我为 QTableView 的一列设置了自定义项委托(delegate)。在某些情况下,我需要将其删除(即设置默认项目委托(delegate))。但是QT好像不允许这样。即使在设置新委托(delega
这两个类都为模型中的数据项提供显示和编辑功能。 QStyledItemDelegate 较新,关于 QItemDelegate 的 Qt 文档指出: Note that QStyledItemDele
我有一个 QTableView在 UI 文件中定义。下图: 我想用 QComboBox 更改月份( 红色 数组点)小部件,处理委托(delegate),但对我来说,对于我的自定义委托(delegate
使用 Qt ItemViews,可以通过 QItemDelegate 修改项目的编辑小部件,该 QItemDelegate 可以通过 createEditor 创建自定义编辑器。谁负责删除委托(del
使用 Qt ItemViews,可以通过 QItemDelegate 修改项目的编辑小部件,该 QItemDelegate 可以通过 createEditor 创建自定义编辑器。谁负责删除委托(del
我有一个自定义 QSortFilterProxyModel,它只显示表格中的某些行和列。我还有一个自定义 QItemDelegate 来控制表中某些值的绘制方式。我只将委托(delegate)应用于需
我正在尝试将委托(delegate)设置为我的 QTreeWidget。问题是永远不会调用委托(delegate) setModelData。调用 createEditor 和 setEditorDa
我是一名优秀的程序员,十分优秀!