Советы по использованию классов Qt Model View - PullRequest
3 голосов
/ 30 апреля 2011

Итак, я пишу игру Судоку на 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.

1 Ответ

3 голосов
/ 30 апреля 2011

У вас есть два варианта:

  1. Продолжать использовать QTableView и ваш QAbstractTableModel и подкласс QStyledItemDelegate для визуализации ячеек именно такхочу их.Тем не менее, вы не можете изменить межклеточную окраску таким образом.

    Обратите внимание, однако, что вы можете достичь многого из того, что вы хотите (шрифты, цвета), реагируя на большее Qt::ItemDataRole s из реализации data() вашей модели.

  2. Напишите собственный виджет и используйте пользовательский интерфейс поставщика данных .Позвольте мне подчеркнуть, что: не продолжайте использовать QAbstractTableModel, когда вы реализуете свой собственный SudokuWidget.Для всех это намного проще (QAbstractItemModel слишком абстрактен и слишком специализирован для случая представлений элементов, чтобы быть полезным в качестве общего интерфейса поставщика данных).

Мой совет: (2). Интервью переоценено.

...