Qt - setLayout()和setCentralWidget()

时间:2015-10-21 04:38:49

标签: qt

我最近开始与Qt和Qwt合作。我自己找不到自己的错误。请帮我。有代码。 我知道我在这里的错误:

.h文件

  ...

  class MainWindow : public
  QMainWindow
  {
      Q_OBJECT
      QWidget *centralWidget;
  public:
      MainWindow(QWidget *parent = 0);
  ...
  }

的.cpp

  MainWindow::MainWindow(QWidget *parent):
  QMainWindow(parent) {
  ...
  ...
  void MainWindow::setPlotButton() {
      button = new QPushButton("push"),
      button->setCheckable(true);   
      connect(button, SIGNAL(toggled(bool)), this, SLOT(toggled(bool)))
      QHBoxLayout *plotsLayout = new QHBoxLayout;
      plotsLayout->setSpacing(10);
      plotsLayout->addWidget(funPlot);
      QHBoxLayout *buttonsLayout = new QHBoxLayout ;
      buttonsLayout->addWidget(button);
      QVBoxLayout *widgetLayout = new QVBoxLayout;
      widgetLayout->addLayout(plotsLayout);
      widgetLayout->addLayout(buttonsLayout);
      setLayout(widgetLayout);
  ...
  }

我收到一条消息" QWidget :: setLayout:试图设置QLayout""在MainWindow"",已经有布局"。我发现我必须使用函数setCentralWidget(),但究竟应该更改什么?

2 个答案:

答案 0 :(得分:7)

不要只调用调用MainWindow方法的setLayout(widgetLayout);,而是尝试调用:

centralWidget()->setLayout(widgetLayout);

主窗口本身已拥有包含centralwidgetQMenuBarQStatusBarQAction - 栏的布局。

您希望新的小部件驻留在中央窗口小部件中,通常也称为“内容窗口小部件”。

答案 1 :(得分:0)

您实例化了QWidget,这是朝着正确方向迈出的一步,但是您需要使用setcentralWidget()函数将QWidget对象(您命名为centralWidget)设置为中央小部件