2009-09-23 8 views
4

Je veux avoir une liste d'éléments qui doivent être traités dans un QListWidget. Similaire à l'importation de CD Windows Media Player, il devrait y avoir une barre de progression pour chaque élément de la liste.Comment dessiner une barre de progression dans un widget de liste dans Qt

Maintenant, il semble y avoir une façon de le faire en créant une barre de progression régulière, en utilisant QPixmap::grabWidget() pour sauver son apparition dans un QPixmap, puis en ajoutant cette QPixmap comme icône au QListWidgetItem via QListWidgetItem::setIcon(). Cependant, cela semble être horriblement farfelu. Connaissez-vous une manière plus élégante de réaliser une barre de progression dans un widget de liste?

+2

jetez un coup d'œil au projet Qt "Torrent Example". Il place un widget de barre de progression à l'intérieur d'une table qui fonctionnerait de manière très similaire. http://doc.trolltech.com/4.5/network-torrent.html –

Répondre

5

Chaque élément d'un QListWidget peut être représenté par un QWidget de votre choix, plutôt que par le rendu par défaut (texte). Vous pouvez définir cela en appelant QListWidget::setItemWidget(). Dans ce cas, je recommande d'utiliser QProgressBar comme widget de rendu - vous devriez obtenir le résultat souhaité.

la documentation De QListWidget::setItemWidget():

Cette fonction ne doit être utilisée pour le contenu statique d'affichage à la place de un élément de widget liste. Si vous souhaitez afficher un contenu dynamique personnalisé ou implémenter un widget d'éditeur personnalisé, utilisez QListView et sous-classe QItemDelegate à la place.

1

Vous pouvez le faire en convertissant votre widget liste en un combo modèle/vue/délégué. Ensuite, vous pouvez définir un délégué sur la liste qui remplace les fonctions de dessin et dessine la barre de progression où vous le souhaitez. Je ne sais pas comment il serait facile d'obtenir un widget réel QProgressBar dans la zone de dessin, cependant.

Alternativement, vous pourriez envisager de créer votre propre conteneur de type liste-widget qui connaît les barres de progression.

+0

Cette approche a un gros problème: perdre l'animation dans les barres de progression cause l'impossibilité de créer une barre de progression "bussy". – Jeka

Questions connexes