问题标签 [qtableview]

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 回答
2311 浏览

qt - 编辑 QTableView 单元格时设置初始文本

我对 QAbstractTableModel 进行了子类化并覆盖了 flags() 方法,以便某些表格单元格是可编辑的。问题是当我开始编辑时,现有的单元格值被删除了。我想最初选择现有的单元格值。我怎样才能做到这一点?

0 投票
2 回答
6594 浏览

c++ - QTableView排序信号?

我使用QTableView+QStandardItemModel来显示一些数据(存储在其他数据结构中的数据),并且这个表视图是可排序的。

既然是可排序的,那么在对这个模型进行排序的时候,我还需要对存储数据的顺序进行排序。我尝试为排序信号实现一个​​插槽,但我不知道单击标题以启动排序操作时会发出什么信号。

我尝试了 clicked 信号,但它只针对数据行发出,而不是针对 headerData。如果我想在对QtableView+进行排序时做其他事情该QStandardItemModel怎么办?

0 投票
1 回答
818 浏览

qt - Qt 获取 QStandardItemModel 的自定义数据类型的参考以更改它

有点奇怪,我看不到实际更改 QStandardItemModel 的“数据”的方法。例如:

这样,我将有效地添加一个带有数字 1 的 std::vector 到模型的索引 {0,0}。但是,我如何从不再有权访问 TestStruct 实例的地方向该 TestStruct 的向量添加另一个数字?

“数据”函数返回一个 QVariant 可以转换为 TestStruct 但它是一个副本,我需要一个参考......明白了吗?

0 投票
2 回答
17700 浏览

qt - Qt QTableView如何有一个只有复选框的列

我们使用的是QTableViewQt 4.6.3,并且需要一个在每个单元格中只有一个复选框的列。我们使用自定义子类QAbstractTableModel作为QTableView. 现在,我们通过设置Qt::ItemIsUserCheckable标志有一个复选框。但是我们无法弄清楚如何摆脱复选框旁边的空白文本框!

我们怎样才能使列只有一个复选框,没有别的?

0 投票
6 回答
4974 浏览

qt - 确定 QTableView 是否有打开的编辑器

有什么方法可以确定QTableView当前单元格中是否有打开的编辑器?我需要处理以下情况:

  • 用户双击单元格并编辑数据,但使单元格处于“编辑”状态
  • 在 UI 的另一部分,执行更改基础模型的选定行的操作。
  • 回到我的观点,我想确定新选择的行是否与打开的行相同。如果没有,我需要采取行动。(提示用户?自动提交?还原?)

我知道如何获取当前项目,并且可以获得该项目的委托,但我没有看到任何isEditMode()我希望找到的属性。

有人可以指出我正确的方向吗?

0 投票
3 回答
48999 浏览

qt - 如何确保 QTableView 中的列被调整到最大

我不知道如何问这个,所以,请随时询问更多信息。

似乎tableView->resizeColumnsToContents()只会根据当前视图中的数据调整所有列的大小。这意味着如果我在下面有更多数据(就字数而言更长),这些字将被包裹起来(如果wordWrap属性设置为 true)。

奇怪的是,如果我向下滚动到底部并刷新数据,tableView将正确调整这些列的大小。好像tableView不知道下面还有更长的文字。

所以,我的问题是,如何确保根据所有数据将这些列的大小调整到最大值?

我的代码

更新 1

我试过tableResult->scrollToBottom()了,它只会根据底部的项目调整大小。所以,如果中间有更长的词,这些词就会被包裹起来。

更新 2

如果有人想了解我在说什么,只需下载此示例。您将看到单击 PushButton 将生成未正确调整大小的数据。

更新 3

可能是一个错误:https ://bugreports.qt.io/browse/QTBUG-9352

0 投票
1 回答
558 浏览

model-view-controller - Qt 厚数据库客户端架构

我的目标是为数据库创建一个胖客户端。基本上都是关于管理三个数据列表。

我想将我的应用程序分割成解耦层,因此使用 Qt 的模型/视图框架对我来说似乎很自然。

  • 我应该什么时候创建 QSql*Model 实例?

我需要能够多次连接/断开与数据库的连接(我有相应的菜单项)。我不满意删除一堆模型并在每次连接/断开时再次创建它们。

有没有替代方法?

  • 我应该在哪里创建 QSql*Model 实例?

我不认为 MainWindow 或任何其他与 GUI 相关的类应该包含这样的代码:

我想将 GUI 与数据结构分离。任何想法如何做到这一点?

  • 我应该何时何地将我的视图绑定到模型?

我需要以十几种方式表示我的三个列表。如果我每次连接/断开连接时都重新创建模型,我将需要再次将新创建的模型注入所有视图。

如果我只能这样做一次,那就太好了,但我不知道怎么做。

  • 讨厌的QSqlTableModel::select()方法怎么办?

这个让我发疯。与其他模型(例如QStringListModelQFileSystemModel等)相比,数据可以开箱即用,派生的模型QSqlTableModel在您手动调用它们的select()方法之前是无用的。在调用之前,模型是空的,因此使用该模型的视图;标题数据也没有填充,因此视图甚至不知道它必须呈现哪些列。

由于我无法避免select()调用,我想知道我应该把它放在哪里以便它适合?我不认为 MainWindow 或任何其他与 GUI 相关的类应该包含该代码。

  • 性能和稳健性

我不乐意在重新连接数据库时重新初始化所有内容。这样做需要很长时间(我的意思是在执行期间)。我还想避免在模型重新创建过程中发生崩溃,因为视图可能仍会引用它们。

没有其他方法可以只设置一次并优雅地处理重新连接吗?

0 投票
1 回答
520 浏览

qt - 一个 QStandardItemModel 用于不同的 QTableView、通用视图和特定视图

我真的不知道这是否有意义,但这就是我想要做的:

我在 QT 中做我的游戏编辑器。目前我正在使用 QStandardItemModel 来存储我的所有场景项目。这些项目具有名称、位置、纹理(自定义类的纹理向量)、动画(动画向量)等。

我发现为行设置一个项目很有用,因为除了将它们放在一个地方之外,我可以轻松地添加或删除这些项目,因此更改此模型应该会影响整个应用程序。

现在,我正在尝试为某个项目的“纹理”做特定的视图。这个 QTableView 应该显示纹理的名称、路径等。所以,基本上我怎样才能在一般模型中获取纹理的向量并填充另一个视图而不做另一个模型?

0 投票
1 回答
311 浏览

qt - Qt4 模型/视图 - 在视图中转换数据?

这是我的用例(非常简化)。

我在 QSQLTableModel 中有一些来自 DB 的数据,我需要对其进行转换:将几个字段合并为一个(并显示为这样)或将一个字段拆分为几个。这应该在模型/视图中如何以及在何处完成?

笔记:

我尝试使用 AbstractProxyModel 来做到这一点,但我想,它只适用于过滤或排序。我可以分配新数据并返回 QModelIndex (它携带指向数据的指针)但是以后应该释放哪个对象?

修改 View 对象也无济于事,因为它单独处理每个表格单元格。

请注意,我无法以任何方式更改数据库。如何在 Qt 中做到这一点?我已经花了整整两天的时间才遇到一堵墙。

0 投票
1 回答
9380 浏览

qt - 如何使 restoreState() 和 saveState() 对 QTableView 类正常工作?

首先,我想说,我的问题已经在这里讨论过,在 SO 上,这里是. 但答案不是很好...

所以,问题来了:我有一个QTableView类,有一个简单的model,与tableView->setModel(model);方法相连。例如,我有 4-5 列。我启动了我的项目应用程序,并对列宽进行了一些更改。按下退出后,我的项目应用程序将tableView->horizontalHeader()->saveState();数据状态保存QSettings到文件中。当我再次启动我的应用程序时,它会变成这样:

但是,什么也没有发生!列宽具有标准宽度。它们不会随着我存储的值而改变!:(

谢谢!


PS:这个问题在课堂上并不明显QTreeView。一切QTreeView正常!