Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt-Can';t正确设置centralWidget()_C++_Qt - Fatal编程技术网

C++ Qt-Can';t正确设置centralWidget()

C++ Qt-Can';t正确设置centralWidget(),c++,qt,C++,Qt,我试图构建一个简单的GUI应用程序。然后我得到了这些警告: .cpp MainWindow::MainWindow(QWidget*父项): QMainWindow(父级), 用户界面(新用户界面::主窗口) { centralWidget=新的QWidget(此); 此->设置centralWidget(centralWidget); ... } void主窗口::setButtons() { 对于(int i=0;isetLayout(vLayout); } } } 尝试此操作后,我仍

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


.cpp

MainWindow::MainWindow(QWidget*父项):
QMainWindow(父级),
用户界面(新用户界面::主窗口)
{
centralWidget=新的QWidget(此);
此->设置centralWidget(centralWidget);
...
}
void主窗口::setButtons()
{
对于(int i=0;i<9;i++){
对于(int j=0;j<9;j++){
btn[i][j]=新的QPushButton(此按钮);
...
QVBoxLayout*vLayout=新的QVBoxLayout(此);
vLayout->addWidget(btn[i][j]);
centralWidget->setLayout(vLayout);
}
}
}
尝试此操作后,我仍然收到警告消息,如何解决此问题


谢谢。

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

 QVBoxLayout *vLayout = new QVBoxLayout(this);
将实例化一个新的
QVBoxLayout
,并将
this
作为其父级。由于
属于
MainWindow*
类型,并且
MainWindow
继承自
QMainWindow
您实际上是在调用
QMainWindow::setLayout
——这就是错误消息的来源

QLayout:正在尝试将QLayout“”添加到主窗口“”,该窗口已存在 有一个布局

其次,在每个循环迭代中创建一个新的
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]);
    }
  }
}
void主窗口::setButtons()
{
QVBoxLayout*vLayout=新的QVBoxLayout(centralWidget);
对于(int i=0;i<9;i++){
对于(int j=0;j<9;j++){
btn[i][j]=新的QPushButton按钮;
...
vLayout->addWidget(btn[i][j]);
}
}
}

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

 QVBoxLayout *vLayout = new QVBoxLayout(this);
将实例化一个新的
QVBoxLayout
,并将
this
作为其父级。由于
属于
MainWindow*
类型,并且
MainWindow
继承自
QMainWindow
您实际上是在调用
QMainWindow::setLayout
——这就是错误消息的来源

QLayout:正在尝试将QLayout“”添加到主窗口“”,该窗口已存在 有一个布局

其次,在每个循环迭代中创建一个新的
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]);
    }
  }
}
void主窗口::setButtons()
{
QVBoxLayout*vLayout=新的QVBoxLayout(centralWidget);
对于(int i=0;i<9;i++){
对于(int j=0;j<9;j++){
btn[i][j]=新的QPushButton按钮;
...
vLayout->addWidget(btn[i][j]);
}
}
}

有帮助吗?@RvdK我已经看到了这一点,我尝试过这样实现。但不工作。对我来说,它编译和运行时没有任何错误或警告。您是否尝试过完全重建项目?删除生成目录并重新编译。@pasbi是的,我试过你说的,不知道为什么它仍然不起作用。有帮助吗?@RvdK我已经看到了,我试过这样实现。但不工作。对我来说,它编译和运行时没有任何错误或警告。您是否尝试过完全重建项目?删除生成目录并重新编译。@pasbi是的,我试过你说的,不知道为什么它仍然不起作用。谢谢你的建议。现在QLayout错误消失了,但QWidget仍然存在。你知道怎么解决这个问题吗?顺便说一句,我试着按照你的示例代码,在我运行这个之后,按钮没有显示,为什么?你肯定在某处调用
MainWindow::setButtons
?我以为电话会在省略的
代码中的某个地方。值得一提的是,我已经对代码进行了测试,它看起来像预期的那样工作——有很多按钮,没有错误消息。谢谢你的建议。现在QLayout错误消失了,但QWidget仍然存在。你知道怎么解决这个问题吗?顺便说一句,我试着按照你的示例代码,在我运行这个之后,按钮没有显示,为什么?你肯定在某处调用
MainWindow::setButtons
?我以为电话会在省略的
代码中的某个地方。值得一提的是,我已经对代码进行了测试,它看起来像预期的那样工作——有很多按钮,没有错误消息。
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]);
    }
  }
}