有关如何使用Qt模型视图类的建议

时间:2011-04-30 16:33:38

标签: c++ qt architecture model-view

所以我一直在用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类功能的人那里寻找一些建议/指导。

1 个答案:

答案 0 :(得分:3)

您有两种选择:

  1. 继续使用QTableView和您的QAbstractTableModel以及子类QStyledItemDelegate来精确地呈现单元格。但是,你无法以这种方式改变细胞间的绘画。

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

  2. 编写自定义窗口小部件,使用自定义数据提供程序界面。我要强调一点:当您实现自己的QAbstractTableModel时,请不要继续使用SudokuWidget。对于每个人来说,这种方式要简单得多(QAbstractItemModel既过于抽象又过于专业化,以至于项目视图无法用作通用数据提供者界面)。

  3. 我的建议是(2)。 Interview被高估了。