2013-07-11 2 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'을 할당 할 수 없습니다. 끝 부분의'new 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()'의 이전 문서를 참조하십시오. –

관련 문제