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

c++ - QStyledItemDelegate with QComboBox with QTableView control(如何传递信号)

我想知道是否有人可以凭借他/她的 Qt 编程智慧和技能将我引向正确的方向,因为我的项目存在以下逻辑问题:

  1. 我在 QtableView 中使用了三种不同的委托控件

    一世。ProdIdDelegate public QItemDelegate 为 m_prodid 创建一个 QcomboBox 委托

    ii. QtySpinDelegate public QitemDelegate 为 m_qty 创建一个 QspinBox 委托

    iii. TaxCDelegate public QitemDelegate 为 m_taxcode 创建一个 QcomboBox 委托

  2. 所有这些委托都集成在 QtableView 控件中,使用 *m_modelo 作为 QstandardItem 类。

  3. QtableView控件共有7列

  4. 委托 m_prodid 填充数据库表字段产品代码并准备好作为下拉项目列表进行选择。

  5. 所有三个代表都有一个 SIGNAL/SLOT 分别他们适当的扫描 n 搜索

QcomboBox(m_prodid) : CurrentIndexChanged(QString) SLOT (myscan descript_n_price)

真正的问题是:

从下拉组合框中选择任何项目后,其搜索结果(例如描述和价格)可以实时显示在 QtableView 的列中,即同一行选择更改的次数,描述,价格必须随着即时效果和显示必须同时更新。

问题是组合框发出的 CurrentIndexChange 发出的信号保留在其本地源文件中,它没有进入 QtableView 源文件的主控件,所有格式化数据都显示和计算在该主控件中。

下面的源代码会让一些人理解试图实现什么?

实施文件

主对话框.cpp

头文件 dialog.h

下面的 png 图像给出了源代码应该做什么的假设?

来自上述源代码的预期逻辑

结果:

在此处输入图像描述

0 投票
0 回答
677 浏览

c++ - 无法使用从 QStyledItemDelegate 派生的自定义委托编辑 QAbstractItemModel 中的自定义项目

我很难在 Qt5 框架中实现自己的 MVC 方法。

我创建了自己的自定义项目类,从 QAbstractItemModel 派生了我的模型类,从 QStyledItemDelegate 派生了我的委托类,并将所有内容放在 QTreeView 中。

我已经尽可能地减少了我的代码以创建一个有点“最小”的例子。

我看到的是以下内容:我可以看到我的标题有 42,我可以看到一个条目说“测试项目”。尽管如此,当我双击后者或在选择它时按 F2 时 - 没有任何反应。'editTriggers' 调用返回 10,这意味着双击应该起作用(但它们不起作用)。我显然在这里遗漏了一些东西,但是经过几天自己试图弄清楚之后,我不得不承认我不知道。这是我的程序:

编辑开始,11 月 28 日

正如@eyllanesc 向我提议的那样,为了方便起见,我建立了一个小的 Github 存储库。链接在这里:

https://github.com/phyz777/DelegateTest.git

编辑结束,11 月 28 日

主.cpp:

主窗口.hpp:

主窗口.cpp:

测试模型.hpp:

测试模型.cpp:

testmodelitem.hpp:

testmodelitem.cpp:

testmodelitemdelegate.hpp:

testmodelitemdelegate.cpp:

我截断了所有包含的内容。我非常感谢提供的任何帮助。提前致谢!

0 投票
1 回答
363 浏览

c++ - 在 Qtableview 上设置具有颜色(红色/绿色/黄色)的特定单元格

我一直在寻找如何在 qtableview 上的特定单元格上设置颜色。目前,我正在使用 qt 示例冻结列来查看如何在特定单元格上设置颜色。
我在论坛上搜索如何告诉使用 qitemdelegate 或 qstyleitemdelegate 绘制背景或前景单元格,但无效。

有人可以启发我或展示我应该如何去做的代码示例。

0 投票
1 回答
501 浏览

c++ - 委托中的 QStandardItem setBackground 使网格在 tableView 中消失

我正在使用委托在 tableView 中将一个单元格的背景设置为蓝色。代码如下:

  1. 在这个序列中,setBackground在setText之前,文本不会显示。如果我改变序列,文本可以显示。
  2. 如果我以这种方式更改背景,表格的网格线就会消失,如下所示:

在此处输入图像描述

虽然不是很清楚(蓝色背景),但您仍然可以在最后一列中看到,没有网格线来分隔单元格。

您能否告诉我这两个问题有什么问题,以及如何解决它们?非常感谢你。

0 投票
1 回答
3733 浏览

c++ - 具有固定列宽的 QTreeView

今天我正在尝试配置一个QTreeView以满足我的要求。我的观点基本上有三列。第二列和第三列应该正好是 50 像素宽,不管小部件的大小是多少。第一列应占据剩余空间。

如果我放大我的小部件,第一列应该自动占据所需的可用空间,而第二列和第三列应该保持它们给定的 50 像素宽度。

这是我到目前为止所尝试的:

主文件

列委托.h

但执行后我得到:

第三列占据了很大的空间

第三列占用更多空间,但第一列应该占用更多空间

有谁知道如何以最少的工作量实现我想要的行为?

0 投票
2 回答
940 浏览

c++ - QListView 仅在视图中显示单个项目

我正在利用 Qt 使用的 Model View Delegate 框架来显示具有自定义“视图”或布局的对象列表。

背景:

我需要在列表中显示国旗、国家名称、城市名称和可选的“高级”评级星,用户可以选择。

为此,我使用以下组件:

  • Model - a QStandardItemModel,见doc page,它保存了所有的数据QListView和交互关注点,doc page

  • Delegate - 为了以自定义布局方式绘制/显示数据,我使用 a QStyledItemDelegate,请参阅文档页面。

  • 视图 - 对于视图,一个简单的QListView就足够了,因为这是一个包含具有自定义布局的对象集合的单列列表。

教程和帮助:

使用以下教程,1. 一个消息查看器应用程序,展示了如何实现一个详细的model-delegate-view概念,2. 诺基亚智能手机的简单消息菜单系统的基础知识,我已经能够相对容易地创建我想要的布局QListView

问题:

我需要将QStandardItem项目添加到我的模型中,这些项目将添加到我的视图中。我这样做了,并且由paint覆盖方法绘制每个项目的委托确认。

但是,在运行时,QListView仅显示 1 个项目。但我可以使用向上/向下箭头键来选择列表中的其他各种项目。

请看下面的代码:

设置 MVC(委托):

mainwindow.h

mainwindow.cpp

并将项目(QStandardItem's)添加到列表中:

最后列表显示数据,但列表仅填充项目,但只有第一个具有可见的文本和图像。

注意:向下滚动时,仅顶部项目可见,请参见下图示例。

例如

初始加载列表:

在此处输入图像描述

向下滚动一个

在此处输入图像描述

选择没有文本/图像的项目:

在此处输入图像描述

附加代码如下:

ServerDelegate处理自定义布局的类

ServerDelegate.h

ServerDelegate.cpp

0 投票
0 回答
843 浏览

c++ - Qt:带有 QAbstractItemModel 和 QStyledItemDelegate 的 QListView 添加项目需要很长时间

我有一个 qt-application QListView,一个自定义模型和一个继承自的类QStyledItemDelegate以显示自定义项。不幸的是,当我添加大约 6000 个项目时,它需要很长时间(5 秒)。您对我的问题有提示/解决方案吗?

下面你会看到我的实现:

该模型:

对于模型,我创建了一个自定义添加和删除方法,该方法将从委托中调用。

ItemViewDelegate:

出于测试目的,应用程序仅显示地址。我还想在一行中显示地址旁边的其他信息。稍后我还想为每一行添加信号/插槽行为,但这还有很长的路要走。

主要的:

在 中main,我调用addAddressItems但也使用单调用变体它很慢。我希望我的代码足够清晰,我也可以帮助其他人。

你有什么想法,为什么添加过程这么慢?

0 投票
1 回答
951 浏览

c++ - QStyledItemDelegate:区分closeEditor()或setModelData()的原因

我正在使用 aQTableWidget并且需要对编辑进行一些自定义处理,因此我QStyledItemDelegate在其上设置了 a 。

当用户完成编辑时,closeEditor()会发出信号,我连接到该信号以处理输入的数据。此信号在按下 Enter/Return 时以及当用户单击其他位置(在QTableWidgetItem要编辑的之外)时都会发出。

我的问题是:如果用户按下 Return/Enter 或单击其他地方,是否可以区分?我想像按 ESC 键一样处理“点击外部”(不更改数据并QTableWidgetItem恢复原始值)。到目前为止,这两种情况都会改变数据。

QAbstractItemDelegate::EndEditHint(与 一起发出closeEditor())没有给我那个信息。

感谢大家的帮助!

编辑:

要在将数据写回模型之前对其进行处理,可以实现setModelData(),但是,如果通过按 Enter/Return 或单击其他位置来调用此函数,似乎还是没有办法……</p>

0 投票
2 回答
1001 浏览

c++ - 如何在 QTableWidget 中输入单元格编辑时弹出 QCompleter

我有一个QTableWidget自定义QStyledItemDelegate,当输入单元格编辑时,我想弹出一个完成符,但它没有出现。

委托人的设置:

我的自定义类:

当我通过双击进入单元格编辑时,什么也没有发生,但如果我评论该行
line_edit->completer()->complete(),我可以编辑单元格但不显示完成。有人有想法吗?

0 投票
1 回答
416 浏览

c++ - 如何在 QListView 中为列表项的边框设置动画?

我正在使用带有从 QStyledItemDelegate 扩展的自定义委托的 QListView。我重新实现了paint方法来自定义绘制列表中的每个项目。在paint 方法中,我在列表视图中的选定项目周围绘制边框。

我希望能够在选择项目时为项目边框设置动画。例如,如果预期的项目边框是 5 像素,我希望在选择项目时让它从 0 像素到 5 像素“动画化”。

我最初的想法是连接一个定时器,每 50 毫秒关闭一次,并在每次定时器关闭时让委托绘制,直到绘制完整的边框宽度。但是,委托重新实现的paint方法是const,因此我无法在每次通过paint方法时保存或更新边框宽度成员变量。

实现这一目标的最佳方法是什么?