C++ Qt-Can';t正确设置centralWidget()
我试图构建一个简单的GUI应用程序。然后我得到了这些警告: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); } } } 尝试此操作后,我仍
.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]);
}
}
}