Qt无法正确设置centralWidget()

时间:2017-11-10 10:40:53

标签: c++ qt

我尝试构建一个简单的GUI应用程序。然后我得到了那些警告:

QLayout: Attempting to add QLayout "" to MainWindow "", which already has a layout
QWidget::setLayout: Attempting to set QLayout "" on MainWindow "", which already has a layout

我用谷歌搜索你必须在MainWindow中设置中央窗口小部件。这是我的工具仍然没有工作:

·H

class MainWindow : public QMainWindow
{
    Q_OBJECT
    QWidget *centralWidget;

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

    void setButtons();
    ...
private:
    Ui::MainWindow *ui;
    QPushButton *btn[9][9];
}


的.cpp

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    centralWidget = new QWidget(this);
    this->setCentralWidget(centralWidget);
    ...
}

void MainWindow::setButtons()
{
    for(int i = 0; i < 9; i++) {
        for(int j = 0; j < 9; j++) {
            btn[i][j] = new QPushButton(this);
            ...
            QVBoxLayout *vLayout = new QVBoxLayout(this);
            vLayout->addWidget(btn[i][j]);
            centralWidget->setLayout(vLayout);
        }
    }
}

尝试此操作后,我仍然收到警告信息,如何解决此问题?

感谢。

1 个答案:

答案 0 :(得分:2)

您的代码有两个基本问题。首先,声明......

 QVBoxLayout *vLayout = new QVBoxLayout(this);

将实例化一个QVBoxLayout作为其父级this。由于this的类型为MainWindow *MainWindow继承自QMainWindow,因此您实际上正在调用QMainWindow::setLayout - 这是错误消息的来源。 ..

  

QLayout:尝试添加QLayout&#34;&#34;到MainWindow&#34;&#34;已经   有一个布局

其次,您在每次循环迭代时创建一个新的QVBoxLayout。如果你真的希望按钮在布局中垂直对齐,请尝试类似......

void MainWindow::setButtons ()
{
  QVBoxLayout *vLayout = new QVBoxLayout(centralWidget);
  for (int i = 0; i < 9; i++) {
    for (int j = 0; j < 9; j++) {
      btn[i][j] = new QPushButton;
        ...
      vLayout->addWidget(btn[i][j]);
    }
  }
}