问题标签 [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 with QComboBox with QTableView control(如何传递信号)
我想知道是否有人可以凭借他/她的 Qt 编程智慧和技能将我引向正确的方向,因为我的项目存在以下逻辑问题:
我在 QtableView 中使用了三种不同的委托控件
一世。ProdIdDelegate public QItemDelegate 为 m_prodid 创建一个 QcomboBox 委托
ii. QtySpinDelegate public QitemDelegate 为 m_qty 创建一个 QspinBox 委托
iii. TaxCDelegate public QitemDelegate 为 m_taxcode 创建一个 QcomboBox 委托
所有这些委托都集成在 QtableView 控件中,使用 *m_modelo 作为 QstandardItem 类。
QtableView控件共有7列
委托 m_prodid 填充数据库表字段产品代码并准备好作为下拉项目列表进行选择。
所有三个代表都有一个 SIGNAL/SLOT 分别他们适当的扫描 n 搜索
QcomboBox(m_prodid) : CurrentIndexChanged(QString) SLOT (myscan descript_n_price)
真正的问题是:
从下拉组合框中选择任何项目后,其搜索结果(例如描述和价格)可以实时显示在 QtableView 的列中,即同一行选择更改的次数,描述,价格必须随着即时效果和显示必须同时更新。
问题是组合框发出的 CurrentIndexChange 发出的信号保留在其本地源文件中,它没有进入 QtableView 源文件的主控件,所有格式化数据都显示和计算在该主控件中。
下面的源代码会让一些人理解试图实现什么?
实施文件
主对话框.cpp
头文件 dialog.h
下面的 png 图像给出了源代码应该做什么的假设?
来自上述源代码的预期逻辑
结果:
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:
我截断了所有包含的内容。我非常感谢提供的任何帮助。提前致谢!
c++ - 在 Qtableview 上设置具有颜色(红色/绿色/黄色)的特定单元格
我一直在寻找如何在 qtableview 上的特定单元格上设置颜色。目前,我正在使用 qt 示例冻结列来查看如何在特定单元格上设置颜色。
我在论坛上搜索如何告诉使用 qitemdelegate 或 qstyleitemdelegate 绘制背景或前景单元格,但无效。
有人可以启发我或展示我应该如何去做的代码示例。
c++ - 委托中的 QStandardItem setBackground 使网格在 tableView 中消失
我正在使用委托在 tableView 中将一个单元格的背景设置为蓝色。代码如下:
- 在这个序列中,setBackground在setText之前,文本不会显示。如果我改变序列,文本可以显示。
- 如果我以这种方式更改背景,表格的网格线就会消失,如下所示:
虽然不是很清楚(蓝色背景),但您仍然可以在最后一列中看到,没有网格线来分隔单元格。
您能否告诉我这两个问题有什么问题,以及如何解决它们?非常感谢你。
c++ - QListView 仅在视图中显示单个项目
我正在利用 Qt 使用的 Model View Delegate 框架来显示具有自定义“视图”或布局的对象列表。
背景:
我需要在列表中显示国旗、国家名称、城市名称和可选的“高级”评级星,用户可以选择。
为此,我使用以下组件:
Model - a
QStandardItemModel
,见doc page,它保存了所有的数据QListView
和交互关注点,doc pageDelegate - 为了以自定义布局方式绘制/显示数据,我使用 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
c++ - Qt:带有 QAbstractItemModel 和 QStyledItemDelegate 的 QListView 添加项目需要很长时间
我有一个 qt-application QListView
,一个自定义模型和一个继承自的类QStyledItemDelegate
以显示自定义项。不幸的是,当我添加大约 6000 个项目时,它需要很长时间(5 秒)。您对我的问题有提示/解决方案吗?
下面你会看到我的实现:
该模型:
对于模型,我创建了一个自定义添加和删除方法,该方法将从委托中调用。
ItemViewDelegate:
出于测试目的,应用程序仅显示地址。我还想在一行中显示地址旁边的其他信息。稍后我还想为每一行添加信号/插槽行为,但这还有很长的路要走。
主要的:
在 中main
,我调用addAddressItems
但也使用单调用变体它很慢。我希望我的代码足够清晰,我也可以帮助其他人。
你有什么想法,为什么添加过程这么慢?
c++ - QStyledItemDelegate:区分closeEditor()或setModelData()的原因
我正在使用 aQTableWidget
并且需要对编辑进行一些自定义处理,因此我QStyledItemDelegate
在其上设置了 a 。
当用户完成编辑时,closeEditor()
会发出信号,我连接到该信号以处理输入的数据。此信号在按下 Enter/Return 时以及当用户单击其他位置(在QTableWidgetItem
要编辑的之外)时都会发出。
我的问题是:如果用户按下 Return/Enter 或单击其他地方,是否可以区分?我想像按 ESC 键一样处理“点击外部”(不更改数据并QTableWidgetItem
恢复原始值)。到目前为止,这两种情况都会改变数据。
QAbstractItemDelegate::EndEditHint
(与 一起发出closeEditor()
)没有给我那个信息。
感谢大家的帮助!
编辑:
要在将数据写回模型之前对其进行处理,可以实现setModelData()
,但是,如果通过按 Enter/Return 或单击其他位置来调用此函数,似乎还是没有办法……</p>
c++ - 如何在 QTableWidget 中输入单元格编辑时弹出 QCompleter
我有一个QTableWidget
自定义QStyledItemDelegate
,当输入单元格编辑时,我想弹出一个完成符,但它没有出现。
委托人的设置:
我的自定义类:
当我通过双击进入单元格编辑时,什么也没有发生,但如果我评论该行
line_edit->completer()->complete()
,我可以编辑单元格但不显示完成。有人有想法吗?
c++ - 如何在 QListView 中为列表项的边框设置动画?
我正在使用带有从 QStyledItemDelegate 扩展的自定义委托的 QListView。我重新实现了paint方法来自定义绘制列表中的每个项目。在paint 方法中,我在列表视图中的选定项目周围绘制边框。
我希望能够在选择项目时为项目边框设置动画。例如,如果预期的项目边框是 5 像素,我希望在选择项目时让它从 0 像素到 5 像素“动画化”。
我最初的想法是连接一个定时器,每 50 毫秒关闭一次,并在每次定时器关闭时让委托绘制,直到绘制完整的边框宽度。但是,委托重新实现的paint方法是const,因此我无法在每次通过paint方法时保存或更新边框宽度成员变量。
实现这一目标的最佳方法是什么?