Domanda

Come si fa a cambiare il comportamento di un QListWidget in modo che ridimensiona la sua altezza invece di scegliere una (apparentemente arbitrario) di altezza e l'aggiunta di barre di scorrimento? Visualizza gli screenshot:

screen shot

Gli anni QListView deve riempire lo stesso spazio in orizzontale in quanto possono (creando il maggior numero di "colonne", se si vuole.) Poi avvolgere e fare tante righe quante necessarie per adattarsi a tutte le voci. Questi calcoli devono essere regolati quando la finestra viene ridimensionata. Questo è tutto bene a lavorare.

Tuttavia, quello che vogliono per accadere è che invece di l'altezza rimanere lo stesso, il QListView dovrebbe crescere o restringersi in verticale e mai bisogno eventuali barre di scorrimento. Lo scorrimento, se necessario, sarà gestita sulla QWidget genitore che ospita tutte le etichette e gli elenchi. Sembra che una volta stabilita l'altezza del QListWidget (non sono sicuro dove la sua impostazione predefinita è venuta da), non cambia mai. E 'troppo grande, in alcuni casi (vedi seconda lista "Test" di cui sopra) e troppo piccola in altri (vedi prima "vuoto Maps" lista di cui sopra.)

Il layout di cui sopra è nulla di sorprendente: due di QLabel e due QListWidget di in un QVBoxLayout. Qui ci sono le proprietà che ho impostati del QListWidget:

setMovement(QListView::Static);
setResizeMode(QListView::Adjust);
setViewMode(QListView::IconMode);
setIconSize(QSize(128, 128));

(ho già provato a installare le politiche barra di scorrimento orizzontale e verticale, ma che appena gira le barre di scorrimento fuori, ritaglio il contenuto. Non è quello che voglio.)

È stato utile?

Soluzione

Forse si potrebbe questo senza usare QListWidget. esempi del Qt contengono una nuova classe di layout, QFlowLayout, che potrebbe essere utile. Con il seguente tipo di widget di gerarchia si potrebbe ottenere più gruppi con etichette e tutti sarebbe all'interno di una QScrollArea.

QScrollBox
  QVBoxLayout

    QLabel "Blank maps"
    QWidget
       QFlowLayout
          your own widgets showing map images and labels

    QLabel "Text"
    QWidget
       QFlowLayout
          your own widgets

Il problema è che questo tipo di soluzione creerebbe molto di più widget di soluzione basata QListWidget. Quindi, se avete centinaia di oggetti nella vostra lista, questo potrebbe non essere la soluzione migliore.

Altri suggerimenti

C'è una funzione di membro protetta denominata contentsSize() in QListView. E 'utilizzato per calcolare la minimum() richiesta, maximum(), e pageStep() per le barre di scorrimento (come detto qui ).

Si può creare una sottoclasse della classe QListView e fare uso di queste informazioni? Vi suggerisco di ricalcolare la dimensione del vostro widget nella stessa funzione in cui si aggiungono i contenuti ad esso. Mentre un po 'carente eleganza, questo sembra essere una soluzione abbastanza affidabile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top