2013-07-11 54 views
11

我想在我的主窗口中設置我的佈局(使用setLayout())。它不發射任何顯示:Qt:無法在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

此代碼不能編譯。你不能分配抽象類型'QLayout'的對象。看到「新的QLayout」結尾附近的一行。 –

回答

17

您需要更改代碼的最後兩行是以下幾點:

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

QMainWindow是一個特例。您可以通過將佈局放在新的QWidget中,然後將其設置爲中央控件來設置此窗口小部件的內容。
this也回答。

+0

好的謝謝!爲什麼沒有任何東西時會出現setLayout void? –

+0

沒有'setLayout(void *)'。請參閱http://qt-project.org/doc/qt-4.8/qwidget.html#setLayout。 'setLayout()'不會「不做任何事情」,它會在小部件上設置佈局。但是,如果您在運行該函數時查看應用程序輸出,則應該看到一個錯誤,指出已經設置了佈局。有關此錯誤的解釋,請參閱關於'setLayout()'的早期文檔。 –