问题标签 [qitemdelegate]

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 投票
2 回答
1036 浏览

qt - QAbstractItemDelegate 绘制时拖动问题

我在 QAbstractItemDelegate (我自己的 Item 委托类)中重载了 paint() 函数。

拖动时,它会绘制整个单元格的内容,这是我不想要的。我假设在拖动时用特定的东西调用了 paint() 函数,但我似乎没有找到它。

我能找到的最接近的是拥有视图类中的 QState 变量(访问函数 QTableView::state() 受保护。)通过在我的 QTableView 派生类上创建一个名为“isDragging()”的函数,它调用函数并返回是否拖动,我可以在我的委托类中确定我是否在拖动,并且可以修改 paint() 函数。

这几乎可以工作。

问题是它在原始单元格中显示修改后的绘画图像,这是我不想要的 - 我想保持原始单元格中的图像保持不变。

我想,必须搜索这些例子,看看是否有什么东西可以做到这一点......

我已经浏览了 Qt 源代码,我可以通过调用 QItemDelegate::paint() 函数看到它设置拖动像素图的位置,但它唯一改变的是它在项目选项样式中强制 QStyle::State_Selected。这还不够,因为该项目已被选中。

有什么方法可以知道如何在拖动时显式绘制单元格的内容?

0 投票
2 回答
662 浏览

qt - 如何在 Qt 中创建 Symbian 样式的列表视图

我以前从未在 Qt 中做过任何项目委托,而且我认为文档没有很好地解释更复杂的委托。

我需要创建 2 种 Symbian(^3) 样式列表

类型 1:

代表作风1

这是用于常见的导航列表,图标和下部标签是可选的。

类型 2:

代表作风2

这是用于设置列表,其中按钮可以是切换(开/关)按钮或执行上下文菜单等。

我将如何继续创建此类项目代表?

最好的问候,老鼠

0 投票
0 回答
2161 浏览

combobox - 带有组合框的 QTableView

我希望我的 QTableView 有一列组合框。经过多次尝试,我已经达到了我的目标:显示组合框。

现在我的问题是他们不会保持所选项目的显示。

我使用自定义委托来执行此操作,以下是相关代码:

类 ComboBoxDelegate(QtGui.QItemDelegate):

感谢您的关注 !

0 投票
1 回答
3655 浏览

combobox - 来自 QTableView 的自定义委托中的组合框的选定项

我使用自定义委托在 QTableView 中显示一列组合框。所有组合框的值都相同,因此给我带来麻烦的并不是人口部分。

我希望它们显示为选定的项目,我可以从数据库中检索一些值。我可以从委托访问数据库,但为了发送我的请求,我需要组合框的行。

所以我想我的问题是:如何遍历表的所有行并从自定义委托内部执行一些操作?

如果它可以帮助这里是我的自定义委托类:

我从 QTableView 中这样称呼它:

希望我足够清楚,感谢您的关注

0 投票
1 回答
1541 浏览

pyqt - 重新排序 QTableView 时不遵循自定义委托

我正在使用自定义委托在 QTableView 中显示一列组合框。

除了默认选择问题(在此处输入链接描述)我在重新排序 QTableView 的数据(每列或通过应用过滤器)时遇到问题。未显示网格时,组合框保持在原来的位置。

有没有办法强制重新绘制代表?我复制了paint方法的代码(没有索引),但这只会导致我的程序崩溃。

如果我不够清楚,请告诉我。

这是我的自定义委托的代码:

我从我的 QTableView 类中调用它:

当我对列进行排序时(来自模型类),我调用 updateDelegate 函数:

0 投票
2 回答
17692 浏览

qt - QListWidget 或 QListView 与 QItemDelegate?

假设我需要显示一个项目列表。每个项目都包含一个 QPushButton 一个图像和一些文本。当用户点击按钮时,应该会发生一些事情(即我需要得到信号)。在 Qt 中实现这个的正确方法是什么?

经过一番阅读,我明白如果我使用 QListWidget 和 QListWidgetItem ,这是可以实现的。我可以根据需要对每个 QListWidgetItem 进行子类化,并将它们设置在列表小部件中。

但是,我还读到更合适的方法(模型视图方法)是使用 QlistView 和 QItemDelegate。但是如果我使用 QItemDelegate,我似乎只能绘制小部件。如何获取按钮事件?

对不起这个巨大的职位。我对何时使用 QListWidget / QListView 的整个概念感到困惑。

0 投票
1 回答
3660 浏览

qt - Qt QTableView 在活动单元格周围绘制边框

我正在尝试在 QTableView 中实现类似于 Excel 的行为,其中在整个当前选择周围绘制了一个边框。我已经尝试过这种感觉就像一百种不同的方法并且不断遇到问题。我可以很容易地绘制边框,但是只要选择更改,就会留下边框的残留物。这是我在 QTableView::paintEvent 中尝试过的一个示例...

该代码产生这样的结果

我会喜欢任何关于如何使这个运行更顺利的建议。我曾尝试在委托中执行此操作,但是委托需要知道所有选择的索引,并且它不能在 QTableView 绘制的网格线上绘制。另外,我的表格类需要知道边框的绘制位置。

0 投票
2 回答
3451 浏览

qt - 将 QItemDelegate 与 QAbstractTableModel 一起使用

我有一个 QAbstractItemModel 和一个 QItemDelegate,这是我的问题。代表什么都不做。它的子程序正在被调用,但没有任何反应。

这是我希望在我的表中看到的内容。

文本:QComboBox:文本:文本:QProgressBar

其中 : 是列分隔符。

代表。#ifndef DELEGATEACTION_H #define DELEGATEACTION_H

模型。

我知道的唯一问题是 ModelAction::setData() 函数不完整。在完成该子例程之前,我必须返回并编辑该模型显示的数据类。组合框和进度条仍然应该显示,只是什么都不做。

在这一点上,我只看到表中每一行的 id 号和我的测试文本“bob”。QComboBox 和 QProgressBar 根本呈现。

任何帮助将不胜感激。

耶克

0 投票
1 回答
3209 浏览

python - 如何在 QItemDelegate sizeHint() 中获取 QTreeView 单元格宽度?

我在 QTreeView 中有一个自定义的 QItemDelegate 绘图文本。在paint() 中,我从样式中获取单元格的大小。然后我使用当前单元格的宽度绘制带有自动换行的文本。

在 sizeHint() 中,我真的只想计算高度。宽度应该是当前单元格宽度。当用户更改单元格宽度时,sizeHint 只会计算自动换行文本的新高度并将其返回。

问题是我无法像在paint() 中那样获得sizeHint() 内的单元格宽度。我正在使用:

这在paint() 中有效,但在sizeHint() 中返回-1。如何在 sizeHint() 中获取当前单元格宽度?

0 投票
1 回答
1586 浏览

qt - 自定义绘制委托中的可点击元素或子小部件

我有一个 QListView,我在其中使用带有自定义绘画的自定义委托来显示项目。在每个项目(即每个列表行)中,我希望能够显示几个“超链接”,用户可以单击这些“超链接”,然后调用某些函数。

我已经尝试检查官方文档(例如Model/View Programming)以及大量的谷歌搜索,但无法弄清楚如何实现这一点。

我有两个想法,每个都有自己的问题:

  • 我可以使用子小部件(如扁平 QPushButton)来绘制它们。然后如何定位和显示这些小部件?
  • 我也可以将它们绘制为文本字符串。然后我如何使它们可点击?或者我可以捕获父 QListView 上的点击事件并以某种方式确定这些事件的坐标吗?然后我可以将坐标与这些可点击元素匹配并采取相应的行动。

我最初的方法是将 QListWidget 与 .setItemWidget() 一起使用,其中我有一个带有布局和子小部件的适当小部件。不幸的是,当我的列表增长到数百或数千个项目时,这太慢了。这就是为什么我使用委托更改为 QListView 的原因。