问题标签 [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.
c++ - QStyledItemDelegate 部分选择默认 QLineEdit 编辑器的文本
我有一个子类,QStyledItemDelegate
目前它没有重新实现任何功能(为了简单起见)。
在默认QStyledItemDelegate
实现中,当用户开始编辑 a 中的文本时QTableView
,委托使用模型中的文本绘制 a QLineEdit
,并选择所有文本(突出显示所有文本以进行编辑)。
文本表示文件名,例如“document.pdf”。允许用户编辑整个文本,但是,我只想首先突出显示基本名称部分(“文档”)而不是后缀(“pdf”)。我怎样才能做到这一点?(我不需要如何做到这一点的逻辑,我需要知道如何QStyledItemDelegate
突出显示部分文本)
我试过了:
in
setEditorData()
用于QLineEdit::setSelection()
突出显示某些文本。这没有效果。paint()
试图根据其他受访者对类似问题的建议进行绘画,但没有成功。我没有什么经验QPainter
。这是一个示例:使用 QStyledItemDelegate 调整 QStandardItem 的选择行为
请帮助,并提前感谢。非常感谢您选择文本的前 3 个字符的代码片段。
c++ - QListView 上的 Qt5 QStyledItemDelegate 删除所有默认样式
我有一些QIcon
和QString
对显示在一个QListview
. 整个事情都是使用 Qt 模型/视图编程设置的。
我在这个中显示带标签的图标QListView
。项目使用IconMode
,Snap
和TopToBottom
标志显示。因此,这些被组织成一个网格。
我想QListView
垂直和居中布局所有项目。为了做到这一点,我对QStyledItemDelegate
对象进行了子类化,并重载了paint方法。但是,我有三个主要问题:
- 图标标签已被移动(在
QStyledItemDelegate
子类中),并且在其原始位置出现了一个虚线方块。 - 所有默认样式都消失了(悬停,选择)。我知道如何再次添加一些,但我想使用默认的(Windows 样式)。
- 一切都被渲染成一个网格,即使
setGridSize
没有被调用。我只想使用一个“列”。
这是一段代码:
- 我的自定义构造函数的摘录
QListView
:
- 的油漆方法
QStyledItemDelegate
:
如果我不使用
initStyleOption
上面显示的,我可以删除虚线方块,但我会丢失所有默认样式。如果我取消注释
initStyleOption
,将出现虚线方块。我也失去了所有的默认样式。
以下是一些截图:
光标在项目 0 上(无悬停装饰,无选择装饰)。
已选择项目 0。出现一个小虚线方块(initStyleOption
已取消注释)。
我已经切换到ListMode
. 选择装饰工作但不悬停。同样,标签的原始位置出现一个小虚线方块。
有人有想法吗?感谢您的回答。
c++ - 无法在 QAbstractItemModel 的 dataChanged 信号槽中获取发送者对象
我对 QAbstractItemModel 进行了子类化,并尝试在 dataChanged 信号槽中检索小部件。
在这里,我每次都得到一个空小部件,与 qobject_cast 的结果相同。
我在我的表视图中设置组合框小部件派生 QStyledItemDelegate 的委托类。
在这种情况下如何获取发件人对象?谢谢。
c++ - 自定义 QStyledItemDelegate - 将编辑应用到模型
在我的项目中,我QStyledItemDelegate
从函数中继承并返回了一个自定义编辑器createEditor
。
编辑完成后,我想将新数据写回模型。所以我覆盖了setModelData
.
这可行,但问题是setModelData
无论编辑器如何关闭都会被调用。EndEditHint
如果编辑器使用,关闭,我只想写入新数据QAbstractItemDelegate::SubmitModelCache
。所以我将closeEditor
信号连接到我制作的一个名为editFinished
.
所以现在我可以看到编辑器是如何关闭的,EndEditHint
以及是否应该将数据写回模型。Buuuuut,在信号setModelData
之前调用。closeEditor
最后一次调用信号时,如何将数据写回模型closeEditor
?我在这里错过了什么吗?
python-3.x - PySide中QListView的自定义ItemDelegate:项目不可见
问题:
为什么这个答案的 Python 等效项
不要在我的列表视图中绘制任何内容,而我可以通过将QStyleOption
包括必要成员和text
-member 设置为所需文本的权利传递给任意标签来绘制各种其他小部件,如下所示:
问题背景:
在 PySide 中,我有一个QFileSystemModel
应用于 aQListView
并希望显示没有文件扩展名的文件名。
我的计划是应用 a CustomDelegate
which 继承QStyledItemDelegate
并更改-functionQStyleOptionViewItem
内部的a 的文本成员,paint()
正如您在上面的第一个代码示例中看到的那样。唯一的区别:"Test Text"
被替换为os.path.splitext(index.data())[0]
.
虽然项目被插入到列表视图中,(我可以通过出现的滚动条和单击列表中的任意位置并打印活动项目来判断)项目根本没有绘制并且保持不可见。
如果我不尝试更改任何内容并传递原始option
参数,也会发生同样的情况:
更多信息:
如果我只是调用超paint()
函数,项目显示正常:
这给了我将自己的想法传递opt
给超级的想法paint()
:
但这也会显示带有扩展名的文件名......尽管将名称放在没有扩展print()
名的控制台上。
opt.text
奇怪的是,在将其设置为任何内容之前尝试打印让我:
最后:省略initStyleOption()
-call 似乎对任何配置都没有任何影响。
c++ - QStyledItemDelegate 绘制自定义小部件失败
在我的一个项目中,我使用 aQTableWidget
来显示一些复杂的计算结果。为了增加表格的可读性,我需要在单个表格单元格内显示两个对齐的值。
稍后我想通过使用颜色或箭头等来自定义小部件。
为此,我源自QStyledItemDelegate
并调用table ->setItemDelegate(new TwoNumbersDelegate)
了我的QTableWidget
实例。
由于某些原因,QFrame
它永远不会显示。我真的什么都试过了。奇怪的是,调用 todrawLine
给出了一些结果,但只在顶部的左侧单元格中。
我的想法是,调用mFrame->render(...)
不是正确的方法,但正确的方法是什么?
我的包含文件是:
我的cpp
文件是:
qt - 滚动时,QStyledItemDelegate 自定义小部件绘制不正确
我之前的一个问题涉及一个自定义的 QStyledItemDelegate,其中包含一个并排的QWidget
两个s。QLabel
我对 Joseph Ireland 给出的简单解决方案非常满意。不幸的是,给定的解决方案被破坏了,但我没有立即意识到这一点。如果QTableWidget
包含 myQStyledItemDelegate
变得太小,则激活滚动条。
现在滚动会破坏我的单元格元素的正确绘制。这似乎是某种更新问题。在我的QAbstractScollArea
.
如果您剧烈滚动,我的表格如下所示:
单元格内容未在正确的位置绘制或似乎根本没有绘制。每隔一排就会发生奇怪的情况。围绕我的视口区域绘制的矩形更加QAbstractScrollArea
混乱。如果窗口被重绘(隐藏/显示窗口)一切都很好。
这种更新/重绘问题的解决方案是什么?也许我需要在滚动完成后重新绘制?
Joseph Ireland 发布的我修改后的解决方案是:
头文件:TwoNumbersDelegate.h
源文件:TwoNumbersDelegate.cpp
以下程序为我提供了测试运行程序:
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() 方法。这是更新的代码(所以我已经部分回答了我自己的问题):
替换了覆盖的绘制程序并且更简洁。
python - 如何为代理模型处理的模型中的多个列设置项目委托?
我像这样设置我的项目代表:
将模型设置为代理模型的源模型后,我的应用程序崩溃但未引发错误:
看来我只能在使用setItemDelegateForColumn
sortfilterproxymodel 处理源模型时使用一个。
ComboBoxDelegate
定义如下: