所以我一直在用C ++编写一个Sudoku游戏。我已经完成并测试了大部分游戏逻辑,但是我想在它上面使用Qt作为GUI。我试图找出根据我的需要使用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类功能的人那里寻找一些建议/指导。
答案 0 :(得分:3)
您有两种选择:
继续使用QTableView
和您的QAbstractTableModel
以及子类QStyledItemDelegate
来精确地呈现单元格。但是,你无法以这种方式改变细胞间的绘画。
但请注意,您可以通过对模型的data()
实施中的更多Qt::ItemDataRole
做出反应来实现您想要的许多内容(字体,颜色)。
编写自定义窗口小部件,使用自定义数据提供程序界面。我要强调一点:当您实现自己的QAbstractTableModel
时,请不要继续使用SudokuWidget
。对于每个人来说,这种方式要简单得多(QAbstractItemModel
既过于抽象又过于专业化,以至于项目视图无法用作通用数据提供者界面)。
我的建议是(2)。 Interview被高估了。