问题标签 [qstyleditemdelegate]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
qt - 在 QStyledItemDelegate 中覆盖 Qt 样式表
我有一个QTableView
使用自定义QStyledItemDelegate
来呈现表格的每一行。样式表通过执行以下操作来设置 TableView 上选定行的背景颜色:
这可以正常工作,但在某些情况下,我想通过使其半透明来调整所选行背景的 alpha。我通过覆盖paint()
.QStyledItemDelegate
这确实改变了颜色,但颜色QPalette::Highlight
不正确。此外,我尝试了所有不同的调色板颜色角色,但它们都没有反映样式表中设置的背景颜色。但是,如果我执行以下操作,它就可以正常工作(减去不透明度)。
我已经读过结合 Qt 样式表QPalette
并不是一个好主意,但我唯一的选择是在样式表中使用另一个变量来反映不透明度,我想不惜一切代价避免这种情况。
python - QStyledItemDelegate 水平截断文本并且不添加水平滚动条
我得到了以下代码,我稍作修改,作为关于如何在 QListWidget 中使用 HTML 格式文本的答案。
主界面
测试.py
代码工作正常,但是,比宽度长的文本QListWidget
被截断,并且不显示水平滚动条。(需要时会自动添加垂直滚动条。)
我尝试通过 ScrollBarAlwaysOn 强制显示,它只显示一个不工作的水平滚动条。
我需要如何更改代码以在需要时自动添加水平滚动条?
c++ - 如何在 QTableview 单元格的值更新后及时为它的颜色设置动画?
我想为 QTableview 单元格的颜色(及时)设置动画,一旦它的值通过连接的数据模型更新,以吸引最终用户注意某些事情发生了变化。
这个想法是颜色在 fi blue 的渐变中发生变化,在值更改后立即从蓝色开始,并在大约 1 ~ 2 秒内逐渐变为白色。
我想这里必须使用 QStyledItemDelegate ,因为我使用模型视图概念(http://doc.qt.io/qt-5/model-view-programming.html)。
需要一个触发器来触发单元格的值更改才能开始动画,这可以通过 paint() 方法来实现,因为它是在值更改时调用的。可以从传递给paint() 的索引参数中找出行和列,以掌握要为哪个单元格设置动画。
到目前为止一切顺利,您可以将该单元格的颜色设置为蓝色。问题来了;颜色会随着时间的推移逐渐变白。所以我在考虑 QStyledItemDelegate 类中的 QTimer 并为正在动画的单元格维护一个有点记账(可能是用于计算蓝色渐变颜色的倒计时值的简单列表。值越低渐变趋向白色,一旦为 0,结果为白色,这是单元格的默认颜色。在每个 QTimer timeout() 事件中,所有不等于 0 的值都降低 1。QStyledItemDelegate 仅连接到 QTableview 的行我想要彩色动画,即显示值项的位置。
我面临的问题是:
- paint() 是一个 const 方法,因此您不能更改任何类参数。
- 如何在 QTimer 事件上重新绘制单元格颜色(重新绘制整个 QTableview 不是上帝风格)
我设法让它工作,但我认为这是一个肮脏的解决方案。我所做的是维护数据模型中每个单元格的颜色动画的簿记。我认为这是一个肮脏的解决方案,因为彩色动画只是一个视觉方面,所以恕我直言,它不应该驻留在数据模型中。这样,它也不是一个可移植的解决方案,即在另一个项目中,您必须进行大量返工才能使其正常工作。
我将我的应用程序剥离到核心问题。完整的代码可以在这里找到(一个工作的应用程序):https ://github.com/fruitCoder123/animated_tableview_cell
我花了很长时间才找到一个好的解决方案。我一个月前开始使用 Qt,所以也许我缺乏知识。希望有人可以提示如何以一种很好的方式解决它 - 封装在视图中而不是与数据模型纠缠在一起。
qt - qstyleeditemdelegate 子类化绘制方法无法正常工作
我延长了qstyleditemview
课程。当我处于qtreeview
项目的编辑模式时,paint 方法似乎没有正确执行。当我将状态更改为QStyle::State_Selected
有效时 - 它会在qtreeview
.
知道为什么它不能在编辑模式下工作吗?
c++ - 通过 QStyledItemDelegate 以不同颜色显示 QTableWidgetItem 的文本
我想以QTableWidgetItem
不同的颜色显示 a 的部分文本(其中一部分应该显示为红色)。
我发现使用 a QStyledItemDelegate
,重新实现paint
函数并显示QTextDocument
使用项目文本并添加 HTML 的 a 。
这将为文本启用 HTML:
但是,与“正常”显示相比,结果有一些像素偏移(很可能以一致的方式修复),但我想知道是否有更简单的方法。我根本不需要 HTML,我只想更改部分文本的颜色。
那么是否可以绘制项目的文本(逐个字母)并为每个字母设置颜色而无需使用QTextDocument
?
c++ - 自定义 QStyledItemDelegate 以绘制多种颜色的文本
我想在 a 中显示两列,显示QTableWidget
两个刺之间的差异(之前由一些 Levenshtein 距离算法计算)。这些部分存储在每个的数据中QTableWidgetItem
,作为QStringList
. 第一部分必须显示为黑色,下一个为红色,然后再次交替显示黑色、红色等。
为此,我使用最终调用方法QStyledItemDelegate
的自定义函数实现了一个:paint()
drawText()
只要列的宽度足够,这就会导致正确的绘画:
但是一旦列变小,我就会得到一个凌乱的溢出:
这肯定是opt.rect
因为应用于显示的每个部分,而不是应用于整个文本。
唯一的问题是我不知道如何解决这个问题 ;-) 任何帮助将不胜感激!提前致谢!
c++ - 具有 3 种价值可能性的图像
我想个性化第三列以包含 QCheckBox 小部件。我希望使用三个图标自定义那些 QCheckBox 小部件: 1.png(默认状态)| 2.png(选中状态) | 3.png(禁用状态)。所以我可以使用具有以下实现的自定义委托来做到这一点:
它适用于 1.png 和 3.png 而不适用于 2.png 的问题。我希望它适用于三个图标
python - 自定义委托项目编辑器小部件出现在错误的位置
我正在尝试使用自定义委托来弹出自定义日期和时间编辑器以在 qtreeview 内部使用。我读到的所有内容都说要让编辑器小部件显示在正确的位置,在当前索引上,你重新实现 updateEditorGeometry 方法并使用 editor.setGeometry(option.rect) 来设置位置。
我似乎无法弄清楚这一点。这是我到目前为止所拥有的。双击第 1 列时,它会在屏幕的左上方显示编辑器。
python - 使用 QStyledItemDelegates 作为 QListView 中的自定义项
我想设计一个自定义ListView
小部件,它具有与此类似的自定义项:
https ://i.stack.imgur.com/iTNbN.png
但是,qt 文档和一些 stackoverflow 帖子指出,理想情况下应该使用QStyleItemDelegate
. 我以前从未与“代表”合作过,但据我从研究中了解到,ListView 调用它们来绘制/渲染每个项目。
我在另一个项目(https://github.com/pyblish/pyblish-lite/blob/master/pyblish_lite/delegate.py)中找到了一个委托示例,他们手工绘制所有内容/本质上是通过绘制矩形来重建整个小部件。
这对我来说似乎有点不切实际,因为大多数时候自定义项目小部件可以是现有小部件的组合。看看上面的截图。它本质上包含一个 Qlabel、QPixmap 和四个 DoubleSpinBox。
问题:您将如何使用其中已经存在的绘画/渲染方法,而不是自己手动绘制所有内容? 这样您就可以从现有的成员方法中获益,并可以使用布局来构建您的小部件。
例如,第一个 ListViewItem 应该将模型数据传递给委托,以便self.lightGroupName
QLabel 的文本可以设置为“Light1”。
非常感谢任何帮助,因为我不知道如何从这里继续:
qt - 如何使用按钮创建项目委托?
包含 3 列的列表。第一列用于显示/隐藏,第二列用于模型名称,第三列用于锁定/解锁,仅在单击项目时才会出现。
你如何使用 QTableWidget 和 QStyledItemDelegate 创建这样的东西?我一直在查看文档和一些问题,但我仍然觉得很难理解。