关于如何使用Qt模型视图类的建议
Advice on how to use Qt Model View classes
所以我一直在用c++写一个数独游戏。我已经完成并测试了大部分游戏逻辑,但我想在GUI上使用Qt。我试图找出最好的方法来工作与Qt类为我的需要。
作为测试,我使用了QAbstractTableModel。我对它进行了子类化,并让它访问我现有的数据模型和控制器。现在我使用QTableView来获得基本的渲染数独板和基本的"编辑"(你可以改变任何值)。它看起来一点也不像我想要的,但功能都在那里(或者可以添加)。
我想做一个数据模型和控制器来修改它全部在c++中,不依赖于框架。然后我想让Qt坐在上面。所以我让它工作了,这里是一个快速的"图表",说明这些东西是如何在高层次上交流的
QTableView?
^
|
v
PuzzleModel : QAbstractTableModel
^ |
| |_____________
| v
Real data model classes <------------ Controllers
我的问题是,我如何修改QTableView或我应该创建自己的视图或QWidget,以显示我想要的方式的数据?
理想情况下,我想显示一个固定大小的表(没有标题,没有调整大小),不允许多选择。有一些关于我如何渲染各种字体样式/颜色的自定义,但我认为我可以很容易地处理。我还想将每个单元格渲染为数字,或者像这样为"标记":
*-------------* *-------------*
| 1 2 3 | | ****** |
| 4 6 | | * |
| 8 9 | | * |
*-------------* *-------------*
显然我不能继续使用QTableView。我创建我自己的QStyledItemDelegate和仍然使用QTableView吗?我需要创建一个完整的小部件吗?如果我创建
只是从知道各种Qt类功能的人那里寻找一些建议/方向。
您有两个选择:
-
继续使用
QTableView
和你的QAbstractTableModel
,以及子类QStyledItemDelegate
来渲染细胞你想要的。但是你不能这样改变细胞间的绘制。注意,然而,你可以实现很多你想要的(字体,颜色)通过反应更多的
Qt::ItemDataRole
s从你的模型的data()
实现。 -
编写自定义小部件并使用自定义数据提供程序接口。让我强调一下:当你实现自己的
SudokuWidget
时,不要继续使用QAbstractTableModel
。这种方式对每个人来说都要简单得多(QAbstractItemModel
对于项目视图来说既过于抽象又过于专门化,无法作为通用的数据提供程序接口)。
我的建议是选(2).面试被高估了。
- Qt - QVector 和模型视图 - 从列表视图获取自定义类的最佳方法是什么?
- 如何根据模型设置的视图调整模型?
- Qml 列表视图在重置模型时保留视图
- 为 QML 树视图创建模型
- C++模型视图设计
- 如何从模型/视图中获取QImage POINTER
- 更新模型/视图方案中 QXXXView (QTableView, QTreeView,..) 元素的显示工具提示
- MFC在切换视图时如何关闭无模型对话框
- 从角度转换为正交保持相同的模型和缩放的视图大小
- Qt中数据类(模型)和视图/控制器类之间的数据通信的正确方式是什么
- Qt:从视图中删除模型
- Qt:模型/视图框架上的数据转换
- 根据用户的视图更改更新模型
- 多个模型视图矩阵
- 垂直列表视图中的水平列表视图模型
- 具有两种不同视图的Qt数据模型
- Qt 5.2模型视图模式:如何通知模型对象底层数据结构的变化
- 了解Qt视图模型架构:何时创建以及如何在QAbstractItemModel实现中清除索引
- Qt中刷新视图模型
- 现代OpenGL投影视图模型转换不起作用