In Qt, quando aggiungo i widget al mio layout, sono centrati verticalmente per impostazione predefinita. C'è un modo per "elencare" i widget dall'alto verso il basso invece di centrarli verticalmente?QVBoxLayout: Come allineare verticalmente i widget in alto invece del centro
risposta
utilizzare il metodo void QLayout::setAlignment (Qt::Alignment alignment)
per impostare l'allineamento in base alla propria scelta.
Trovo questo un po 'più complicato del semplice utilizzo di layout.setAlignment()
. Ha continuato a non funzionare per me fino a poco tempo fa, quando ho capito che se hai widget in espansione per i quali hai impostato l'altezza massima, allora quel widget non sarà allineato come vuoi tu.
Ecco il codice di esempio che fa non top allinea il widget QTextBrowser()
anche se chiamo layout.setAlignment(Qt.AlignTop)
. Spiacente che sia in Python, ma è piuttosto facile tradurre in C++ (sono andato nell'altro modo molte volte).
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class MyWidget(QWidget):
"""
Create a widget that aligns its contents to the top.
"""
def __init__(self, parent=None):
QWidget.__init__(self, parent)
layout = QVBoxLayout()
label = QLabel('label:')
layout.addWidget(label)
info = QTextBrowser(self)
info.setMinimumHeight(100)
info.setMaximumHeight(200)
layout.addWidget(info)
# Uncomment the next line to get this to align top.
# layout.setAlignment(info, Qt.AlignTop)
# Create a progress bar layout.
button = QPushButton('Button 1')
layout.addWidget(button)
# This will align all the widgets to the top except
# for the QTextBrowser() since it has a maximum size set.
layout.setAlignment(Qt.AlignTop)
self.setLayout(layout)
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
widget = MyWidget()
widget.show()
widget.resize(QSize(900, 400))
app.exec_()
le seguenti chiamate esplicitamente layout.setAlignment(info, Qt.AlignTop)
per ottenere il widget di testo spendere al lavoro.
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class MyWidget(QWidget):
"""
Create a widget that aligns its contents to the top.
"""
def __init__(self, parent=None):
QWidget.__init__(self, parent)
layout = QVBoxLayout()
label = QLabel('label:')
layout.addWidget(label)
info = QTextBrowser(self)
info.setMinimumHeight(100)
info.setMaximumHeight(200)
layout.addWidget(info)
# Uncomment the next line to get this to align top.
layout.setAlignment(info, Qt.AlignTop)
# Create a progress bar layout.
button = QPushButton('Button 1')
layout.addWidget(button)
# This will align all the widgets to the top except
# for the QTextBrowser() since it has a maximum size set.
layout.setAlignment(Qt.AlignTop)
self.setLayout(layout)
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
widget = MyWidget()
widget.show()
widget.resize(QSize(900, 400))
app.exec_()
Dopo il confronto tra le due soluzioni, sembra che:
myLayout.setAlignment(Qt.AlignTop)
opere per diversi widget di allineamento ma:
myLayout.setAlignment(myWidget, Qt.AlignTop)
opere solo per il primo widget si aggiunge al layout . Dopo tutto, la soluzione dipende anche da QSizePolicy dei tuoi widget.
Se si dispone di un QVBoxLayout
e volete che i vostri widget dimensione fissa di essere impilati in alto, si può semplicemente aggiungere un tratto verticale aggiungere alla fine:
layout.addStretch()
Se si dispone di più barelle o altri elementi elastici, è possibile specificare un argomento di fattore di stiramento intero che definisce il loro rapporto di dimensione.
Vedere anche addStretch e addSpacerItem.
Non sono sicuro che questo risponda alla tua domanda originale, ma è la risposta a quello che ho avuto su google e su questa pagina, quindi potrebbe essere utile anche per gli altri.
C'è un modo per aggiungere 500 pollici a un post? – Acidic
- 1. Spazio tra i widget in QVBoxLayout
- 2. come allineare il testo verticalmente al centro in Android
- 3. Come allineare DrawableLeft in alto invece al centro in Android TextView?
- 4. Come allineare verticalmente (al centro) il contenuto di UITableView?
- 5. Android allineare il testo in alto al centro
- 6. Come allineare verticalmente UICollectionViewCells in un UICollectionView?
- 7. Come allineare i componenti JSF al centro
- 8. Allineare verticalmente UILabel
- 9. Come rendere i widget del centro di notifica (iOS 5)
- 10. Come allineare gli oggetti verticalmente in ASP.NET?
- 11. centro verticalmente backIndicatorImage a Swift
- 12. Come allineare verticalmente più tabelle o elementi grafici in Lyx
- 13. Come allineare verticalmente le immagini in <td>
- 14. PyQt5: Centro allineare un'etichetta
- 15. Come allineare verticalmente due div flottanti?
- 16. Elimina tutti i bambini da QVBoxLayout
- 17. Come allineare verticalmente campate con testo e immagine
- 18. Come allineare al centro questo testo accanto a un pulsante?
- 19. Allineare verticalmente il badge Bootstrap 3 all'interno dell'intestazione
- 20. Come allineare gli elementi td nel centro
- 21. Allineare un pulsante al centro
- 22. Allineare ProgressBar orizzontale in alto (rimuovi gap)
- 23. CSS: come ridimensionare l'immagine dal centro invece che in alto a sinistra
- 24. Come allineare 3 UIButtons al centro di un UITableCellView?
- 25. Come allineare verticalmente un campo di testo in AS3
- 26. Come allineare sia verticalmente che orizzontalmente in CSS?
- 27. CSS: destro allineare un testo verticalmente ruotato
- 28. Android - Come allineare un centro di immagine rispetto al TextView
- 29. Posizione icona verticalmente al centro nel div
- 30. verticalmente allineare Hyphend testo e delle icone
Questo ha risolto anche il mio problema. Non sono proprio sicuro * perché * è necessario impostare una larghezza/altezza minima. Potresti forse esporlo? – Seth