2013-09-22 8 views
5

Voglio imparare come creare una GUI a mano senza il designer. Ho provato ad aggiungere un layout al mio MainWindow, ma durante l'esecuzione si diceQt - Il compilatore si lamenta quando invoca setLayout() sulla mia MainWindow

QWidget :: setLayout: Tentativo di impostare QLayout "" su MainWindow "", che ha già un layout

Questo è il mio codice:

//Header 
class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    MainWindow(QWidget *parent = 0); 
    ~MainWindow(); 
private: 
    QHBoxLayout *layout; 
}; 

//Constructor in my *.cpp 
MainWindow::MainWindow(QWidget *parent) 
    : QMainWindow(parent) 
{ 
    layout = new QHBoxLayout; 
    this->setLayout(layout); 
} 

//The usual main function 
int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    MainWindow w; 
    w.show(); 

    return a.exec(); 
} 

Cosa c'è che non va? Ho fatto quello che il mio libro ha detto. Ho anche cercato un codice su Internet che era davvero difficile da trovare in qualche modo ed era sempre lo stesso. Non riesco proprio ad aggiungere un layout alla mia finestra.

+1

possibile duplicazione di [problema Qt con l'applicazione GUI] (http://stackoverflow.com/questions/3938037/qt-problem-with-gui-application) – Mat

risposta

18

C'è una domanda simile che mi ha aiutato a scoprire cosa c'è che non va. Grazie a Mat per il suo link a quella domanda.

Ciò che ogni esigenza di QMainWindow è un QWidget come widget centrale. Ho anche creato un nuovo progetto con il designer, lo ho compilato e ho guardato i file ui _ *. H.

Così ogni QMainWindow dovrebbe essere simile a questo:

//Header 
class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 
    QWidget *centralWidget; 
    QGridLayout* gridLayout; 

public: 
    MainWindow(QWidget *parent = 0); 
    ~MainWindow(); 
private: 

}; 

//*.cpp 
MainWindow::MainWindow(QWidget *parent) 
    : QMainWindow(parent) 
{ 
    centralWidget = new QWidget(this); 
    this->setCentralWidget(centralWidget); 
    gridLayout = new QGridLayout(centralWidget); 
} 

Ora non ti aggiungere/impostare il layout al MainWindow. Si aggiunge/si imposta al centraleWidget.

+0

Nota: QMainWindow ha un metodo centralWidget(). Il tuo campo centraleWidget lo ombreggia. Suggerirei di rinominare il campo o rimuoverlo completamente per evitare possibili problemi futuri. –

Problemi correlati