Layout di Qt su QMainWindow
-
19-09-2019 - |
Domanda
Ho progettato un QMainWindow
con QtCreator's
designer. Consiste del widget centrale predefinito (un QWidget
) che contiene un QVBoxLayout
con tutti gli altri widget in esso. Ora tutto quello che voglio, è che il QVBoxLayout
occupa automaticamente tutto il widget centrali rettangolo spazio.
Come posso fare questo? Non ho trovato alcuna né proprietà utilizzabile nelle proprietà widget centrali né quelli QVBoxLayout's
.
Soluzione
Non è necessario creare un QVBoxLayout
manualmente. Basta selezionare il QWidget
centrale e premere un pulsante make-layout.
Altri suggerimenti
Se si vuole fare con il codice invece di utilizzare QtCreator
, è possibile impostare il layout in un QWidget
e quindi impostare il QWidget
come il widget centrale della finestra principale in questo modo:
#include <QtGui>
#include <QWidget>
#include <QHBoxLayout>
#include "mainwindow.h"
MainWindow::MainWindow() {
// Set layout
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(myWidget1);
layout->addWidget(myWidget2);
// Set layout in QWidget
QWidget *window = new QWidget();
window->setLayout(layout);
// Set QWidget as the central layout of the main window
setCentralWidget(window);
}
Aggiungi almeno un widget sul vostro MainWindow
. Quindi selezionare la finestra cliccando su di esso e fare clic sul pulsante VerticalLayout
in cima QTCreator
. È layout verticale viene automaticamente aggiunto al widget di centro e riempie tutta la superficie.
Questa è già una risposta, ma io personalmente preferisco mantenere tutti gli elementi di controllo e layout aggiunti manualmente al form. Non aggiungo controlli nei file di classe, mi limito a collego i segnali / slot per nascondere / mostrare widget rilevanti per la logica nella classe, all'interno della classe.
Per aggiungere manualmente un layout a qualsiasi widget di è prima necessario aggiungere almeno un widget figlio / controllo. Non era del tutto chiaro per me e stavo cercando di aggiungere il layout di prima.