gpt4 book ai didi

c++ - Qt 无法正确设置 centralWidget()

转载 作者:行者123 更新时间:2023-11-28 01:40:53 24 4
gpt4 key购买 nike

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

QLayout: Attempting to add QLayout "" to MainWindow "", which already has a layout<br/>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);
}
}
}

尝试过后,仍然收到警告信息,我该如何解决这个问题?

谢谢。

最佳答案

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

 QVBoxLayout *vLayout = new QVBoxLayout(this);

将实例化一个新的 QVBoxLayout 并将 this 作为其父级。因为 thisMainWindow * 类型并且 MainWindow 继承自 QMainWindow 你有效地调用了 QMainWindow::setLayout -- 这是错误消息的来源...

QLayout: Attempting to add QLayout "" to MainWindow "", which already has a layout

其次,您要在每次循环迭代时创建一个新的 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]);
}
}
}

关于c++ - Qt 无法正确设置 centralWidget(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47220900/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com