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

qt - 正确实现 QStyledItemDelegate

我有一个包含 QTreeWidget 的类(EditorTagManager)。在运行时,树可以包含任意数量的标签项,所有这些都是可检查的。我试图在 QTreeWidgetItems 之间添加水平线,以明确这些标签是不相关的并且是相互分开的(每个项目都是一个根级节点)。

从我对该主题的研究中,我发现在任何有意义的程度上控制 QtreeWidgetItems 的外观的唯一方法是继承 QStyledItemDelegate 并将委托绑定到 QTreeWidget。这是一个抽象的概念,所以我不完全理解它。因为我以前从未需要对 Qt 对象进行子类化,所以我不确定我是否正确地做。

由于 Qt 文档并没有真正解释如何执行此操作,因此我使用 Clementine 1.0.1 源代码中的 settingsdialog.cpp/.h 文件作为我的指南/参考,因为 Clementine 的首选项窗口在其 QTreeWidget 上使用了类似的分隔符。我正在尝试从 Clementine 的代码对我自己的解决方案进行逆向工程,唯一的问题是 Clementine 对此的实现做了我不需要的事情(所以我必须弄清楚什么与我的代码相关,什么不相关)。这就是让我走到这一步的原因;我的代码与 Clementine 代码非常相似(我只是更改了委托类名称):

这是我当前在 editortreemanager.h 中的委托头声明:

这是我当前在 editortreemanager.cpp 中的委托源:

尽管 TagListDelegate::paint() 实际上还没有做任何事情,但我只是想让这段代码正常工作,然后再尝试更改 QTreeWidgetItems 的外观。我的目标是现在尽可能简单。

在我告诉 QTreeWidget (ui->AvailableTags) 使用委托之前,一切都编译得很好:

编译器错误显示:

/home/will/qt_projects/robojournal/ui/editortagmanager.cpp:211: 错误: 没有匹配函数调用'QTreeWidget::setItemDelegate(TagListDelegate*)'

我在这里有点不知所措,所以我肯定会感谢一些帮助来解决这个问题。

更新(7/30/13):

我的代表类现在看起来像这样:

资源:

标头声明:

更新(7/31/13)

这是我的课程现在的样子:

标题:

资源:

0 投票
1 回答
1985 浏览

c++ - Qt5 C++:为特定表列设置 Spinbox 委托

我正在尝试将旋转框项目委托添加到表中的特定列。在查看了 Qt 中的示例后,我复制了大部分代码并实现了它,但是当我调用setItemDelegateForColumn()我的应用程序崩溃时。列索引有效。任何想法我做错了什么?

主要调用方法:

自定义 Spinbox 实现:

0 投票
1 回答
1545 浏览

qt - QItemDelegate 中编辑器的高度

我有 QListView 和 QItemDelegate 的自定义实现。MyItemDelegate 重新实现 createEditor() 以显示自定义小部件。小部件的大小取决于内容。默认情况下,每行高度约为 20px(一行),但我的编辑器具有更大的高度。我试图覆盖 QItemDelegate::sizeHint() 方法,但不包含对编辑器的引用,所以我无法计算正确的大小。

如何使 QListView 将行大小调整为编辑器的实际大小?

0 投票
0 回答
371 浏览

qt - 为什么 QCompleter 与代表的工作方式不同?

我正在尝试为 QLineEdit 实现自动完成。

在这里看我的代码:

对于此代码,ExpressionLineEdit 和 Completer 可以正常工作(如预期的那样)。

但是当我尝试将 QTreeView 和 QSyledItemDelegate 设置为时,行为发生了变化。我试图重新实现QSyledItemDelegate的eventFilter函数,但它不说话。我尝试将 ExpressionLineEdit 设置为其他 QWidget 并将 QWidget 设置为 QTreeView (因为 QSyledItemDelegate 不能直接与 ExpressionLineEdit 一起使用),但它再次没有帮助。

这是带有 QTreeView 和 QSyledItemDelegate 的代码。

请帮助理解为什么相同的代码在这两种情况下的工作方式不同。请帮助修复 Completer 的行为。

0 投票
2 回答
828 浏览

qt - 使 QTableView 中的项目委托不透明

我发布了 QTableView 的自定义项目委托问题。

该屏幕截图完全说明了该问题:

在此处输入图像描述

我们可以在项目委托编辑器后面看到项目内容。隐藏该内容或使项目委托不透明的最佳方法是什么?(如何获得已编辑行的背景颜色/画笔?)

0 投票
2 回答
2186 浏览

c++ - Qt委托设置复选框的鼠标悬停状态

我在 QTableview 中使用的委托中有一个绘制方法,我在其中将复选框指示器添加到单元格。当我通过检查 QStyle::State_MouseOver 标志的 option.state 进入单元格时,很容易设置复选框的鼠标悬停状态,但理想情况下我需要做的只是在鼠标指针时为复选框指示器设置鼠标悬停状态位于指示器本身上方,而不仅仅是在单元格周围徘徊。不幸的是,目前仅在从一个单元格移动到另一个单元格时才会触发绘制方法,因此我需要一些有关如何执行此操作的指示。

代码如下(其中mouse_pointer_是最后存储的鼠标坐标):

任何帮助将非常感激。

0 投票
1 回答
2290 浏览

python - 在 PySide QTreeWidget 中设置行的背景

我从上一篇文章的答案开始,它似乎不起作用。所有行都呈现相同的颜色。

我创建了一个主窗口类

ItemManifest 用于保存特定于列表项的数据(不确定这是 Qt 的处理方式)

这是我的实际树小部件,包含三列:

创建一个颜色委托,用于将带有文本“a”的行的背景颜色设置为绿色

让它起作用:

我设置背景颜色的尝试似乎都没有奏效。

0 投票
1 回答
3668 浏览

qt - 如何在 QStyledItemDelegate 中绘制正确的文本颜色

我想绘制一个自定义项目委托,它遵循当前样式。但是“WindowsVista/7”样式和“WindowsClassic”的文本颜色是有区别的。

winViste/7 和 winClassic 的区别

我使用以下代码绘制背景(工作):

如何以正确的颜色绘制文本?

我不能用它style->drawControl(QStyle::CE_ItemViewItem, &opt, painter, opt.widget);来绘制整个项目,因为我必须绘制比一个文本行更多的特殊文本。(此功能将正确绘制颜色。)

我试过了,style->drawItemText(painter, opt.rect, opt.displayAlignment, opt.palette, true, "Hello World!");但它总是漆成黑色。对于painter->drawText(),我不知道如何设置正确的笔颜色。

0 投票
1 回答
364 浏览

c++ - Delegate erasing text in QTreeView using QStandardItemModel

I'm having some difficulty adding a delegate to my QTreeView. I have added some QStandardItems through a model which works fine, but when I add the delegate, the text is erased and only the icons are visible.

This is the code i'm using for my delegate:

What i would like to do is combine the two, which is to say, have the text and checkboxes, and to the right have the icons that i have put in the delegate.

Maybe someone can point me in the right direction here ?

Cheers.

0 投票
1 回答
674 浏览

qt - 为 QTreeWidget 标头设置委托

我需要为QTreeWidget标题设置委托或使用其他方式使其与 HTML 标记一起使用。

QTreeWidget我为使用的项目设置了一个委托

它有效。

但是将委托设置为标头不起作用: