问题标签 [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 回答
1492 浏览

c++ - QStyledItemDelegate 部分选择默认 QLineEdit 编辑器的文本

我有一个子类,QStyledItemDelegate目前它没有重新实现任何功能(为了简单起见)。

在默认QStyledItemDelegate实现中,当用户开始编辑 a 中的文本时QTableView,委托使用模型中的文本绘制 a QLineEdit,并选择所有文本(突出显示所有文本以进行编辑)。

文本表示文件名,例如“document.pdf”。允许用户编辑整个文本,但是,我只想首先突出显示基本名称部分(“文档”)而不是后缀(“pdf”)。我怎样才能做到这一点?(我不需要如何做到这一点的逻辑,我需要知道如何QStyledItemDelegate突出显示部分文本)

我试过了:

请帮助,并提前感谢。非常感谢您选择文本的前 3 个字符的代码片段。

0 投票
1 回答
773 浏览

python - QStyledItemDelegate 绘制刷新问题

我目前正在尝试围绕模型视图方法进行思考并编写缩略图查看器应用程序。

在此示例中,我只是尝试绘制 20 个框,但我得到的似乎是随机选择,会随着鼠标移动而更新。滚动使事情变得更糟,有时只绘制框等。而且文本似乎根本没有呈现。

对我来说,这看起来像是绘制方法的刷新/更新问题。我在这里错过了什么吗?

油漆问题

最终我需要展示很多项目。所有这些都包含一些标签和一个需要在运行时更新的像素图。所以我认为画它们是最快的解决方案。或者,我尝试在paint方法中渲染我的小部件:

这似乎更慢,但至少工作。

这是一个最小的工作示例来说明我的问题:

提前致谢。任何帮助或指示下一步将不胜感激!

0 投票
0 回答
380 浏览

c++ - QListView 上的 Qt5 QStyledItemDelegate 删除所有默认样式

我有一些QIconQString对显示在一个QListview. 整个事情都是使用 Qt 模型/视图编程设置的。

我在这个中显示带标签的图标QListView。项目使用IconMode,SnapTopToBottom标志显示。因此,这些被组织成一个网格。

我想QListView垂直和居中布局所有项目。为了做到这一点,我对QStyledItemDelegate对象进行了子类化,并重载了paint方法。但是,我有三个主要问题:

  1. 图标标签已被移动(在QStyledItemDelegate子类中),并且在其原始位置出现了一个虚线方块。
  2. 所有默认样式都消失了(悬停,选择)。我知道如何再次添加一些,但我想使用默认的(Windows 样式)。
  3. 一切都被渲染成一个网格,即使setGridSize没有被调用。我只想使用一个“列”。

这是一段代码:

  • 我的自定义构造函数的摘录QListView
  • 的油漆方法QStyledItemDelegate
  • 如果我不使用initStyleOption上面显示的,我可以删除虚线方块,但我会丢失所有默认样式。

  • 如果我取消注释initStyleOption,将出现虚线方块。我也失去了所有的默认样式。

以下是一些截图:

无装饰

光标在项目 0 上(无悬停装饰,无选择装饰)。

在此处输入图像描述

已选择项目 0。出现一个小虚线方块(initStyleOption已取消注释)。

在此处输入图像描述

我已经切换到ListMode. 选择装饰工作但不悬停。同样,标签的原始位置出现一个小虚线方块。

有人有想法吗?感谢您的回答。

0 投票
2 回答
207 浏览

c++ - 无法在 QAbstractItemModel 的 dataChanged 信号槽中获取发送者对象

我对 QAbstractItemModel 进行了子类化,并尝试在 dataChanged 信号槽中检索小部件。

在这里,我每次都得到一个空小部件,与 qobject_cast 的结果相同。

我在我的表视图中设置组合框小部件派生 QStyledItemDelegate 的委托类。

在这种情况下如何获取发件人对象?谢谢。

0 投票
2 回答
1823 浏览

c++ - 自定义 QStyledItemDelegate - 将编辑应用到模型

在我的项目中,我QStyledItemDelegate从函数中继承并返回了一个自定义编辑器createEditor

编辑完成后,我想将新数据写回模型。所以我覆盖了setModelData.

这可行,但问题是setModelData无论编辑器如何关闭都会被调用。EndEditHint如果编辑器使用,关闭,我只想写入新数据QAbstractItemDelegate::SubmitModelCache。所以我将closeEditor信号连接到我制作的一个名为editFinished.

所以现在我可以看到编辑器是如何关闭的,EndEditHint以及是否应该将数据写回模型。Buuuuut,在信号setModelData之前调用。closeEditor最后一次调用信号时,如何将数据写回模型closeEditor?我在这里错过了什么吗?

0 投票
1 回答
362 浏览

python-3.x - PySide中QListView的自定义ItemDelegate:项目不可见

问题:

为什么这个答案的 Python 等效项

不要在我的列表视图中绘制任何内容,而我可以通过将QStyleOption包括必要成员和text-member 设置为所需文本的权利传递给任意标签来绘制各种其他小部件,如下所示:


问题背景:

在 PySide 中,我有一个QFileSystemModel应用于 aQListView并希望显示没有文件扩展名的文件名。
我的计划是应用 a CustomDelegatewhich 继承QStyledItemDelegate并更改-functionQStyleOptionViewItem内部的a 的文本成员,paint()正如您在上面的第一个代码示例中看到的那样。唯一的区别:"Test Text"被替换为os.path.splitext(index.data())[0].

虽然项目被插入到列表视图中,(我可以通过出现的滚动条和单击列表中的任意位置并打印活动项目来判断)项目根本没有绘制并且保持不可见。

如果我不尝试更改任何内容并传递原始option参数,也会发生同样的情况:


更多信息:

如果我只是调用超paint()函数,项​​目显示正常:

这给了我将自己的想法传递opt给超级的想法paint()

但这也会显示带有扩展名的文件名......尽管将名称放在没有扩展print()名的控制台上。

opt.text 奇怪的是,在将其设置为任何内容之前尝试打印让我:

最后:省略initStyleOption()-call 似乎对任何配置都没有任何影响。

0 投票
1 回答
1714 浏览

c++ - QStyledItemDelegate 绘制自定义小部件失败

在我的一个项目中,我使用 aQTableWidget来显示一些复杂的计算结果。为了增加表格的可读性,我需要在单个表格单元格内显示两个对齐的值。

稍后我想通过使用颜色或箭头等来自定义小部件。

为此,我源自QStyledItemDelegate并调用table ->setItemDelegate(new TwoNumbersDelegate)了我的QTableWidget实例。

由于某些原因,QFrame它永远不会显示。我真的什么都试过了。奇怪的是,调用 todrawLine给出了一些结果,但只在顶部的左侧单元格中。

我的想法是,调用mFrame->render(...)不是正确的方法,但正确的方法是什么?

我的包含文件是:

我的cpp文件是:

0 投票
0 回答
654 浏览

qt - 滚动时,QStyledItemDelegate 自定义小部件绘制不正确

我之前的一个问题涉及一个自定义的 QStyledItemDelegate,其中包含一个并排的QWidget两个s。QLabel

我对 Joseph Ireland 给出的简单解决方案非常满意。不幸的是,给定的解决方案被破坏了,但我没有立即意识到这一点。如果QTableWidget包含 myQStyledItemDelegate变得太小,则激活滚动条。

现在滚动会破坏我的单元格元素的正确绘制。这似乎是某种更新问题。在我的QAbstractScollArea.

如果您剧烈滚动,我的表格如下所示:

暴力滚动破坏了我的桌子

单元格内容未在正确的位置绘制或似乎根本没有绘制。每隔一排就会发生奇怪的情况。围绕我的视口区域绘制的矩形更加QAbstractScrollArea混乱。如果窗口被重绘(隐藏/显示窗口)一切都很好。

这种更新/重绘问题的解决方案是什么?也许我需要在滚动完成后重新绘制?

Joseph Ireland 发布的我修改后的解决方案是:

头文件:TwoNumbersDelegate.h

源文件:TwoNumbersDelegate.cpp

以下程序为我提供了测试运行程序:

0 投票
1 回答
1399 浏览

python - 带有 QTableWidget 的 Qt ItemDelegate displayText():如何访问表索引?

我根据组合框的设置(在 QTableWidget 之外)以各种数字格式在 QTableWidget 中显示数据。displayText()这可以通过重新定义ItemDelegate的方法来很好地工作。

我还想根据其索引对显示的文本进行样式/修改,但是,只有文本和语言环境作为参数传递给displayText().

作为一种解决方法,我还重新定义了该paint()方法,因为这里也传递了索引。这对我来说似乎很笨拙,当我开始为文本设置样式时,我也走到了尽头——纯粹的 Cargo Cult 编程......

那么,我是不是找错树了?有没有更简单的方法来格式化,例如只有元素 (0,1) (见下面的代码),也许在displayText()?

以下代码只是一个最小的工作示例,完整的代码在

https://github.com/chipmuenk/pyFDA/blob/coeff_table/pyfda/input_widgets/filter_coeffs.py

编辑:================================================= ==================

@m7913d 的建议对我有用,我重写了 initStyleOption() 方法,而不是看起来更简洁的 paint() 方法。这是更新的代码(所以我已经部分回答了我自己的问题):

替换了覆盖的绘制程序并且更简洁。

0 投票
1 回答
1560 浏览

python - 如何为代理模型处理的模型中的多个列设置项目委托?

我像这样设置我的项目代表:

将模型设置为代理模型的源模型后,我的应用程序崩溃但未引发错误:

看来我只能在使用setItemDelegateForColumnsortfilterproxymodel 处理源模型时使用一个。

ComboBoxDelegate定义如下: