2013-07-11 12 views
11

Ich versuche, mein Layout (mit setLayout()) in meinem Hauptfenster zu setzen. Es zeigt nichts auf Start:Qt: Layout kann nicht 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

Dieser Code wird nicht kompiliert. Sie können kein Objekt vom abstrakten Typ 'QLayout' zuordnen. Siehe die Zeile nahe dem Ende, die 'new QLayout' sagt. –

Antwort

17

Sie müssen die letzten beiden Zeilen Code ändern, die folgenden sein:

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

Die QMainWindow ist ein Sonderfall. Sie legen den Inhalt dieses Widgets fest, indem Sie das Layout in ein neues QWidget einfügen und dieses als zentrales Widget festlegen.
Siehe auch this antwort auch.

+0

ok danke! Warum gibt es ein setLayout void, wenn es nichts tut? –

+0

Es gibt kein 'setLayout (void *)'. Siehe http://qt-project.org/doc/qt-4.8/qwidget.html#setLayout. Und 'setLayout()' "tut nichts", legt das Layout für das Widget fest. Wenn Sie jedoch beim Ausführen dieser Funktion die Anwendungsausgabe betrachten, sollte ein Fehler angezeigt werden, der besagt, dass bereits ein Layout festgelegt wurde. Eine Erklärung zu diesem Fehler finden Sie in der früheren Dokumentation zu setLayout() '. –

Verwandte Themen