Pergunta

Eu entendo mais ou menos como o MPV funciona. Mas eu não entendo quais aulas:

  • QAbstractItemModel
  • QAbstractItemView
  • QAbstractItemDelegate / QItemDelegate

Pode fazer por mim?

Se isso for relevante, estou usandoQGraphicsScene / QGraphicsView Com alguns elementos (representação visual do quadro de jogos) com os quais o usuário pode interagir enquanto a lógica de interação (regras do jogo) é encapsulada em outra classe.

Foi útil?

Solução

AbstractItemModel QabstractItemView QabstractItemDelegate

São do "Modo/View Framework"
Esta é uma estrutura muito poderosa para a parte de dados do seu aplicativo, aqui é uma apresentação da estrutura.

QabstractItItemModel

É a classe base para o Modelo do MVC. Tem uma interface global para acessar e alterar os dados e cuida da parte observável.

QabstractItEmView

É a classe base para o Vista do MVC. Possui interface aglobal para a parte de visualização/seleção e cuida da parte do observador. Você não precisa se preocupar com o padrão de observador, a estrutura faz isso por você.

QabstractItEmDelegate

É a classe base para o Controlador do MVC.
É o padrão de estratégia para pintar, editar os elementos, ...


QGraphicsScene / QGraphicsView

São do "A estrutura de exibição de gráficos" e é independente da estrutura de modelo/exibição.
Esta também é uma estrutura muito poderosa para a parte gráfica.

A cena

QGraphicsScene fornece a cena de exibição gráfica. A cena tem as seguintes responsabilidades:

Fornecendo uma interface rápida para gerenciar um grande número de itens que propagam eventos para cada estado de gerenciamento de itens, como seleção e manuseio de foco, fornecendo funcionalidade de renderização não transformada; principalmente para impressão

A vista

O QGraphicsView fornece o widget de exibição, que visualiza o conteúdo de uma cena. Você pode anexar várias visualizações à mesma cena, para fornecer várias viewports no mesmo conjunto de dados


Se você deseja que um modelo seja visível em um QGraphicsView, você terá que escrever sua própria visualização com base no QabStractiTemView.
Pegue um QGraphicsView como Widget da porta de exibição QAbstractScrollArea::setViewport(QWidget * widget)) E então você pode

  • adicionar QAbstractItemView::rowsInserted,
  • remover QAbstractItemView::rowsAboutToBeRemoved
  • e mudança QAbstractItemView::dataChanged

os itens na cena. Não se esqueça de cuidar da redefinição de eventos de mudança de layout.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top