3

所以我一直在用 C++ 编写数独游戏。我已经完成并测试了大部分游戏逻辑,但我想在它之上使用 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 类功能的人那里寻找一些建议/指导。

4

1 回答 1

4

你有两个选择:

  1. 继续使用QTableView你的QAbstractTableModel, 和子类来完全按照你想要的QStyledItemDelegate方式呈现单元格。但是,您不能以这种方式更改单元间绘画。

    但是请注意,您可以通过对Qt::ItemDataRole模型实现中的更多 s做出反应来实现很多您想要的(字体、颜色) data()

  2. 编写自定义小部件并使用自定义数据提供者接口。让我强调一点:QAbstractTableModel当你实现自己的SudokuWidget. 这样对每个人来说都简单得多(QAbstractItemModel对于项目视图的情况来说,既太抽象又太专业,无法用作通用数据提供者接口)。

我的建议是使用(2)。面试被高估了。

于 2011-04-30T16:50:50.320 回答