问题标签 [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 投票
1 回答
3034 浏览

python - 如何使项目视图在 PyQt 中呈现丰富的(html)文本?

我正在尝试从python 中的这个线程翻译代码:

我猜元素的大小和位置计算不正确,可能是因为我根本不了解原始代码中与样式相关的部分。有人能帮我吗?

0 投票
3 回答
12445 浏览

qt - 在 QListView 的 QWidgetDelegate 的 paint() 方法中渲染 QWidget

我在QListView. 我目前有一个QListView显示我的自定义模型,称为PlayQueue基于QAbstractListModel.

这适用于简单的文本,但现在我想为每个元素显示一个自定义小部件。所以我将 a 子类QStyledItemDelegate化来实现这样的paint方法:

选择背景已正确呈现,但未显示任何小部件。我尝试使用QPainterQt 示例中的简单命令,效果很好:

所以我尝试了一些更改,例如:

  • 更改QStyledItemDelegateQItemDelegate
  • 添加painter->save()painter->restore()围绕渲染
  • 将小部件几何设置为可用大小

但是我现在有点卡住了,我在互联网上搜索了一段时间,但找不到任何我想要的示例,他们都在谈论编辑小部件(这更容易)或自定义绘制控件(预定义的,如进度条)。但在这里我真的需要一个我创建的自定义小部件,其中包含一些布局、标签和像素图。谢谢你的帮助!

我在 Ubuntu 11.04 上为 GCC 使用 Qt 4.7.3。

0 投票
2 回答
8296 浏览

qt - 如何使用 QStyledItemDelegate 绘制不同的背景?

问题

  • 我有QTreeView对象,还有一个QStandardItemModel作为模型来查看小部件;
  • 对于某些项目,我使用setData方法设置数据以使用参数拆分它们;
  • 所以我需要为项目绘制不同的背景像素图QStandardItem,其中包含图标和一些文本数据;
  • 并且不想重绘所有项目对象,我的意思是图标和文本。只是改变背景。

首先,我在想:

  • Qt Designer我可以为具有 2 个不同背景图片的对象设置 CSS 样式表, QStandardItem 没有 setProperty方法...

例子:

  • 然后我创建了自己的委托,从QStyledItemDelegate类继承并重新实现paint方法,但是我不能只更改背景,因为QStyledItemDelegate::paint( painter, opt, index );代码会透支我的drawPixmap...

例子:

所以我被困住了...

0 投票
0 回答
1007 浏览

expand - Qt:ProxyModel、QTreeView 和带过滤的委托设置无法正确更新

我有一个 QTreeView 设置显示 QSortFilteredProxyModel 在 filterAcceptsRow() 中自定义过滤,只接受取决于父行值的值的行(通过 QStyledItemDelegate 派生类在 QComboBox 中选择。例如,如果我在一行中选择“类型” 值“宝马”,我想为这个特殊情况显示孩子。这对第一个项目很有用,我可以在 Item1 中选择这些值多个级别(最多 5 个级别)。一切都很好。

但是,我注意到,一旦我使用 item1 和此自定义过滤,然后添加 item2,问题就开始了。我注意到的第一件事是,QTreeView 确实取消了 item1/item2 的公共父项,并且只显示了根项的子项。正常行为(以及添加 item1 的行为确实如此)是扩展 item1 的父项。为什么这会对第二个项目感到困惑,并且只有当我一直在玩 item1 的儿童设置 idk 时。此外,我注意到在 item2 中过滤无法正常工作。我在 item2->Type 中有一个 QComboBox,其子项取决于 item2->Type 值。. QComboBox 的默认值的第一个子项仍会按应有的方式显示,但是在更改 QComboBox 时,视图不再更新,并且留在 item2/item3/... 中的第一个加载的子项 但是,使用正确的值/索引调用 Delegate::setModelData 并相应地调用 TreeItem->setData() 。只是过滤似乎卡在了 TreeItem->data() 的旧值上。请再次注意,这只发生在我玩过 item1 之后。如果我不碰那个项目,我可以正确玩所有其他项目(item2,item3,...)并且它做得很好。

如果有人可以提供帮助,我将非常高兴。

有没有人给我提示,什么可能导致扩展状态的“重置”,即使 expand() 被称为 item1 和 item2 插入并且对 item1 很好用?什么可能导致我的进一步问题?

ExampleDelegate.h

代理模型.h

代理模型.cpp

0 投票
1 回答
376 浏览

pyqt - pyqt :使用 QStyledItemDelegate 设置项目边界线

我尝试在 QListView 中设置项目边界线。
当鼠标悬停在项目上时,线条出现,当鼠标离开项目时,线条恢复正常。这就是我想要的。
所以,我使用 QStyledItemDelegate 似乎这样做,这是不正确的。

代码在上面。
如果我选择该项目,它搞砸了。
所选项目有边界并且不会消失。

我该如何解决?

0 投票
1 回答
945 浏览

c++ - QStyledItemDelegate 和 QStandardItem 防止更改文本,仅启用选择和复制

我有一个简单的 QStandardItem 和 QTableView 和 QStyledItemDelegate。他们有代表,我想禁止用户更改表中列的内容,只允许选择和复制。我猜它与QStyledItemDelegate::createEditor.

当我将其设置为返回 0 时,它只会禁用所有内容。

我的问题是,我如何定义它,所以我只能选择和复制,并禁用编辑它的选项,如删除或更改文本

0 投票
1 回答
508 浏览

qt - QTextEdit 和 QPushButton 在一个 QAbstractModelItem

我使用 QTreeView 来可视化我的对象属性。它类似于 Qt 设计器中的属性编辑器。我有各种值,布尔值,文本,颜色值,枚举,浮点数,整数,文件名等。

我使用自定义模型来保存所有对象值并通过自定义委托显示它。因此,委托检测数据的类型并具有用于编辑的特殊表示,例如用于 int/float 的 Spinboxes 和用于 bool 的复选框。目前,我的代表为例如旋转框创建编辑器并覆盖paint() 函数以将值表示为复选框。

现在我想允许用户以两种方式编辑一个值。用户应使用普通文本字段进行编辑、复制/粘贴等来更改值或按下按钮打开 QFileDialog 并选择正确的文件。
它应该如下图所示:

图片

我怎样才能做到这一点?
我需要一个文本字段和一个按钮来打开 QFileDialog。

我使用 Qt 5.0。谢谢帮助

0 投票
1 回答
3257 浏览

qt - 使用 QStyledItemDelegate paint() 在表格中绘制图标

我正在尝试为 QStyledItemDelegate 子类(QT4.8.2)实现自定义绘制函数。

我已经查看了 StarItemDelegate 示例等,它看起来非常简单。委托被分配给表中指示记录状态的列。列项目是可编辑的,但用户不可编辑。我已经实现了委托子类并证明它可以工作,但似乎无法让它绘制一个简单的图标。

绘制函数的代码是:

现在,我只是想确保绘画功能正常工作。该图标已在应用程序的其他区域中使用,因此我知道它可以工作。我还没有很好地掌握 QT,所以我确信这是一个相当简单的问题来解决,但是从我阅读过的论坛帖子或我设法挖掘的 QT 示例中没有任何东西能引起我的注意向上。

有什么想法吗?

0 投票
0 回答
338 浏览

python-2.7 - QComboBox 的委托不适用于默认项目

我正在使用 QComboBox 将来自数据库的一些 MAC 地址显示为整数。为了以更熟悉的“dotted octets”格式显示它们,我创建了以下QStyledItemDelegate

但是当我从QSqlTableModelQComboBox委托设置模型时:

它仅适用于下拉列表中的项目,但不适用于列表关闭时显示的默认项目(请注意,整数 346868604928 对应于 MAC 地址 00:50:C2:FA:E0:00):

在此处输入图像描述

为什么会这样?我知道模型是否可编辑,默认值应该显示在QLineEdit中,但事实并非如此,那么我们如何为关闭的QComboBox小部件设置QItemDelegate呢?

0 投票
1 回答
581 浏览

pyqt - closeEditor 只接受 2 个参数(给定 2 个)

有谁知道我为什么会收到以下错误:

我正在使用 QStyledItemDelegate,以便使用我自己的 QLineEdit 对表 (QTableWidget()) 进行更多控制。当我离开由自定义编辑器控制的表格单元格的焦点时,会发生错误。

以下代码基于PySide stardelegate.py 示例