2017-09-28 16 views
0

Je crée une application qui enregistre les données d'un service d'envoi d'objet. J'ai créé cela avec Qt, un modèle de type QStandardItemModel que je veux afficher avec QtableView. Mais QtableView me montre le niveau de ligne sur la gauche. Je veux le supprimer ou le cacher si possible.Comment créer un multi-niveau QheaderView?

J'ai aussi un problème avec un en-tête que je veux diviser en deux horizontalement puis diviser la partie correspondante du bas en deux verticalement. La raison de cette division est que j'ai deux en-têtes avec des débuts similaires (date de correspondance et numéro de correspondance)

Merci pour votre réponse parce que c'est vraiment important pour moi.

enter image description here

+0

Voilà comment vous pouvez cacher la ligne nombres: 'myTableView-> verticalHeader() -> hide();' Mais la deuxième partie de votre question est beaucoup plus difficile. Je pense que le seul moyen possible serait de sous-classer 'QHeaderView' et d'implémenter le rendu des parties supérieures des en-têtes des deux colonnes adjacentes car il s'agit d'un seul en-tête de colonne. – Dmitry

+0

vous pourriez mettre une image de la façon dont vous voulez les en-têtes. – eyllanesc

+0

Quant à ma première question votre réponse fonctionne parfaitement mais la seconde est un peu floue pour moi, je pense que je vais mieux comprendre avec un visuel aussi je posterai le mien (si je trouve le chemin) car je pense à la mise en page J'ai choisi est logique dans cet ordre mais je suis ouvert à toutes les suggestions merci. –

Répondre

1

Ce type de QHeaderView n'existe pas, mais nous pouvons créer pour cela nous devons créer une classe qui hérite de QHeaderView et réécrire principalement la méthode paintSection qui est la méthode chargée de tirer les sections de le QHeaderView. Mais pour faire le projet générique pour tout type de conception visuelle, nous devons garder l'information de la position et de la taille de chaque section, pour cela nous allons créer un modèle, pour comprendre pourquoi des classes écrasées je vous recommande de lire contenu du code suivant link.

Expliquer la logique de chaque méthode est étendue afin que placer le link du projet qui met en œuvre ce qui précède et décrire la tâche de chaque classe:

  • TableHeaderItem: Il est responsable de l'enregistrement des informations de chaque article, principalement rowspan et columnspan en plus de l'étiquette.

  • GridTableHeaderModel: classe Model qui donne accès à chaque élément afin que nous puissions éditer et de lire chaque article

  • GridTableHeaderView: Cette classe est la coutume QHeaderView où les principales méthodes sont écrasées pour obtenir le look désiré. (Optionnel): est un TableView qui a des méthodes pour fonctionner directement avec GridTableHeaderView.

Sortie:

enter image description here

Note: pour cacher l'en-tête verticale, il est seulement nécessaire d'utiliser la méthode hide():

horizontalHeader()->hide(); 
+0

Merci beaucoup eyllanesc J'ai essayé de compiler votre source de code il y avait quelques erreurs que j'ai réussi à résoudre certaines qui étaient dues à des fichiers non inclus et je suis en train de lire votre code source pour essayer de mieux comprendre votre approche merci encore –

+0

Le résultat que vous obtenez avec la capture d'écran est exactement ce que je veux. la capture d'écran de l'erreur https://i.imgur.com/8DH1h1J.png –

+0

Quelle est votre version de Qt5? – eyllanesc