问题标签 [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.

0 投票
0 回答
722 浏览

qt - 在 QStyledItemDelegate 中覆盖 Qt 样式表

我有一个QTableView使用自定义QStyledItemDelegate来呈现表格的每一行。样式表通过执行以下操作来设置 TableView 上选定行的背景颜色:

这可以正常工作,但在某些情况下,我想通过使其半透明来调整所选行背景的 alpha。我通过覆盖paint().QStyledItemDelegate

这确实改变了颜色,但颜色QPalette::Highlight不正确。此外,我尝试了所有不同的调色板颜色角色,但它们都没有反映样式表中设置的背景颜色。但是,如果我执行以下操作,它就可以正常工作(减去不透明度)。

我已经读过结合 Qt 样式表QPalette并不是一个好主意,但我唯一的选择是在样式表中使用另一个变量来反映不透明度,我想不惜一切代价避免这种情况。

0 投票
1 回答
257 浏览

python - QStyledItemDelegate 水平截断文本并且不添加水平滚动条

我得到了以下代码,我稍作修改,作为关于如何在 QListWidget 中使用 HTML 格式文本的答案。

主界面

测试.py

代码工作正常,但是,比宽度长的文本QListWidget被截断,并且不显示水平滚动条。(需要时会自动添加垂直滚动条。)

我尝试通过 ScrollBarAlwaysOn 强制显示,它只显示一个不工作的水平滚动条。

我需要如何更改代码以在需要时自动添加水平滚动条?

0 投票
1 回答
755 浏览

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 的行我想要彩色动画,即显示值项的位置。

我面临的问题是:

  1. paint() 是一个 const 方法,因此您不能更改任何类参数。
  2. 如何在 QTimer 事件上重新绘制单元格颜色(重新绘制整个 QTableview 不是上帝风格)

我设法让它工作,但我认为这是一个肮脏的解决方案。我所做的是维护数据模型中每个单元格的颜色动画的簿记。我认为这是一个肮脏的解决方案,因为彩色动画只是一个视觉方面,所以恕我直言,它不应该驻留在数据模型中。这样,它也不是一个可移植的解决方案,即在另一个项目中,您必须进行大量返工才能使其正常工作。

我将我的应用程序剥离到核心问题。完整的代码可以在这里找到(一个工作的应用程序):https ://github.com/fruitCoder123/animated_tableview_cell

我花了很长时间才找到一个好的解决方案。我一个月前开始使用 Qt,所以也许我缺乏知识。希望有人可以提示如何以一种很好的方式解决它 - 封装在视图中而不是与数据模型纠缠在一起。

0 投票
2 回答
1117 浏览

qt - qstyleeditemdelegate 子类化绘制方法无法正常工作

我延长了qstyleditemview课程。当我处于qtreeview项目的编辑模式时,paint 方法似乎没有正确执行。当我将状态更改为QStyle::State_Selected有效时 - 它会在qtreeview.

知道为什么它不能在编辑模式下工作吗?

0 投票
1 回答
384 浏览

c++ - 通过 QStyledItemDelegate 以不同颜色显示 QTableWidgetItem 的文本

我想以QTableWidgetItem不同的颜色显示 a 的部分文本(其中一部分应该显示为红色)。

我发现使用 a QStyledItemDelegate,重新实现paint函数并显示QTextDocument使用项目文本并添加 HTML 的 a 。

这将为文本启用 HTML:

但是,与“正常”显示相比,结果有一些像素偏移(很可能以一致的方式修复),但我想知道是否有更简单的方法。我根本不需要 HTML,我只想更改部分文本的颜色。

那么是否可以绘制项目的文本(逐个字母)并为每个字母设置颜色而无需使用QTextDocument?

0 投票
1 回答
598 浏览

c++ - 自定义 QStyledItemDelegate 以绘制多种颜色的文本

我想在 a 中显示两列,显示QTableWidget两个刺之间的差异(之前由一些 Levenshtein 距离算法计算)。这些部分存储在每个的数据中QTableWidgetItem,作为QStringList. 第一部分必须显示为黑色,下一个为红色,然后再次交替显示黑色、红色等。

为此,我使用最终调用方法QStyledItemDelegate的自定义函数实现了一个:paint()drawText()

只要列的宽度足够,这就会导致正确的绘画:

列宽足够

但是一旦列变小,我就会得到一个凌乱的溢出:

列太窄

这肯定是opt.rect因为应用于显示的每个部分,而不是应用于整个文本。

唯一的问题是我不知道如何解决这个问题 ;-) 任何帮助将不胜感激!提前致谢!

0 投票
1 回答
749 浏览

c++ - 具有 3 种价值可能性的图像

我想个性化第三列以包含 QCheckBox 小部件。我希望使用三个图标自定义那些 QCheckBox 小部件: 1.png(默认状态)| 2.png(选中状态) | 3.png(禁用状态)。所以我可以使用具有以下实现的自定义委托来做到这一点:

它适用于 1.png 和 3.png 而不适用于 2.png 的问题。我希望它适用于三个图标

0 投票
1 回答
345 浏览

python - 自定义委托项目编辑器小部件出现在错误的位置

我正在尝试使用自定义委托来弹出自定义日期和时间编辑器以在 qtreeview 内部使用。我读到的所有内容都说要让编辑器小部件显示在正确的位置,在当前索引上,你重新实现 updateEditorGeometry 方法并使用 editor.setGeometry(option.rect) 来设置位置。

我似乎无法弄清楚这一点。这是我到目前为止所拥有的。双击第 1 列时,它会在屏幕的左上方显示编辑器。

0 投票
1 回答
375 浏览

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.lightGroupNameQLabel 的文本可以设置为“Light1”。

非常感谢任何帮助,因为我不知道如何从这里继续:

0 投票
0 回答
38 浏览

qt - 如何使用按钮创建项目委托?

在此处输入图像描述

包含 3 列的列表。第一列用于显示/隐藏,第二列用于模型名称,第三列用于锁定/解锁,仅在单击项目时才会出现。

你如何使用 QTableWidget 和 QStyledItemDelegate 创建这样的东西?我一直在查看文档和一些问题,但我仍然觉得很难理解。