qt - Come faccio a creare uno splitter con una serie di pulsanti su di esso?
-
27-10-2019 - |
Domanda
Qualcuno ha riscontrato problemi nell'inserire pulsanti (o altri widget) sulla parte superiore di una maniglia di divisione?Ho provato a ottenere la maniglia, impostare il layout e mettere i controlli lì, ma ho avuto un aspetto strano.
Il mio obiettivo principale è creare una finestra di dialogo di selezione come illustrato di seguito:
Cosa ottengo:
Codice:
QDialog dialog = new QDialog();
dialog.setLayout(new QVBoxLayout());
QSplitter splitter = new QSplitter();
splitter.setSizePolicy(new QSizePolicy(QSizePolicy.Policy.MinimumExpanding, QSizePolicy.Policy.Fixed));
splitter.addWidget(new QListWidget());
splitter.addWidget(new QTableWidget());
dialog.layout().addWidget(splitter);
QSplitterHandle h = splitter.handle(1);
h.setFixedWidth(30); // I added this line to show the splitter handle
QVBoxLayout lt = new QVBoxLayout();
lt.setSpacing(0);
lt.setMargin(0);
lt.addWidget(new QPushButton("Hello", dialog));
lt.addWidget(new QPushButton("Good bye", dialog));
h.setLayout(lt);
dialog.show();
Soluzione
Questo dà risultati migliori:
// h.setFixedWidth(30);
splitter.setHandleWidth(30);
Per un risultato migliore, suggerirei di sottoclassare QSplitterHandle e reimplementare sizeHint()
.Consulta la documentazione QSplitterHandle .
Puoi modificare l'impostazione del layout per ottenere le posizioni esatte dei pulsanti. Ad esempio:
lt.addStrecth();
Per rimuovere "relief" -bar è necessario creare una sottoclasse da QSplitterHandle e reimplementare paintEvent()
.