2013-07-11 11 views
11

Sto provando a impostare il mio layout (usando setLayout()) nella mia finestra principale. Esso non mostra nulla sul lancio:Qt: impossibile impostare il layout in QMainWindow

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    explicit MainWindow(QWidget *parent = 0) 
    { 
     QVBoxLayout *vBoxLayout = new QVBoxLayout; 
     { 
      QPushButton *pushButton = new QPushButton(tr("A button")); 
      vBoxLayout->addWidget(pushButton); 
     } 
     setLayout(vBoxLayout); 
    } 
}; 
+0

Questo codice non viene compilato. Non è possibile assegnare un oggetto di tipo astratto 'QLayout'. Vedi la linea vicino alla fine che dice 'nuovo QLayout'. –

risposta

17

È necessario modificare le ultime due righe di codice per essere i seguenti:

QWidget *widget = new QWidget(); 
widget->setLayout(VBoxLayout); 
setCentralWidget(widget); 
//VBoxLayout->addWidget(new QLayout); 
//setLayout(VBoxLayout); 

Il QMainWindow è un caso speciale. Puoi impostare il contenuto di questo widget inserendo il layout in un nuovo QWidget e impostandolo come widget centrale.
Vedere anche la risposta this.

+0

ok grazie! perché c'è un vuoto setLayout quando non fa nulla? –

+0

Non c'è 'setLayout (void *)'. Vedi http://qt-project.org/doc/qt-4.8/qwidget.html#setLayout. E 'setLayout()' non "fa nulla", imposta il layout sul widget. Tuttavia, se si guarda l'output dell'applicazione quando si esegue quella funzione, si dovrebbe vedere un errore che dice che è già stato impostato un layout. Vedere la documentazione precedente su 'setLayout()' per una spiegazione di questo errore. –

Problemi correlati