Pergunta

Minha pergunta é sobre QT e seu QabstractItItemModel.

Eu tenho um mapa de cordas e duplas (std::map<stringclass, double>) que eu gostaria de apresentar em um widget QT. Enquanto eu poderia usar QTableView Para isso, eu gostaria de explorar o fato de que as chaves do mapa são de forma "abc.def.ghi"Onde pode haver várias cordas que podem começar"abc.def"E ainda mais que começa com"abc".

Então, eu gostaria de configurar um modelo de dados de árvore para apresentar os itens em um QtreeView Curti

(-) abc
    |--(-)def      
          |--ghi    3.1415
          |--jkl    42.0815
    |--(+)pqr
    |--(+)xyz

As chaves do meu std::map São as folhas da árvore, onde todos os outros nós seriam construções temporárias e auxiliares para suportar a dobra para a conveniência do usuário.

Infelizmente, os métodos rowCount, index, columnCount, e data ter medívores de constância, por isso não posso simplesmente configurar uma estrutura de dados auxiliar para os cabeçalhos QabstractItItemModel derivado e altere essa estrutura de dados lá.

Qual seria a melhor prática para isso? Devo configurar outra camada de classe entre minha std::map e a QabstractItItemModel Ou há uma maneira mais inteligente de fazer isso?


Editar 1: o std::map pode mudar enquanto o QtreeView é mostrado e usado, para que os nós auxiliares possam ser jogados fora e reconstruídos. Minha suposição é que a melhor maneira de lidar com isso é reestruturar o QabstractItItemModel - ou devo simplesmente jogar esse modelo e atribuir um recém -construído ao QtreeView? Nesse caso, eu poderia configurar todos os nós dentro do construtor sem me incomodar com a consciência dos métodos, eu acho.

Foi útil?

Solução

Eu analisava o mapa e criaria uma estrutura de dados de árvore com base nela. Certifique -se de sincronizar o modelo ao alterar o mapa. Se esta etapa de sincronização ficar muito complicada, você poderá manter seus dados em uma estrutura de árvore desde o início e converter em um mapa quando necessário.

Analisar o mapa em tempo real no modelo Functions parece ser uma má idéia para mim, você gostaria que essas funções sejam o mais rápido possível.

Outras dicas

Não vejo como os const-modificadores seriam realmente um problema.

Que membros do seu QAbstractItemModel derivado você gostaria de modificar quando rowCount, index, columnCount e data Métodos são chamados? Você pode muito bem armazenar uma referência ao seu mapa e calcular tudo a partir dele. Não há necessidade de modificar o próprio mapa para extrair as informações necessárias (até onde eu sei!).

Editar após editar1 e comentários :
Se o seu mapa for modificado, use -o como estrutura base em sua própria classe. Se você não conseguir manter uma referência ao seu mapa, porque a vida útil do modelo pode exceder os mapas, use ponteiros inteligentes para garantir que isso não aconteça.

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