我尝试构建一个简单的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);
}
}
}
尝试此操作后,我仍然收到警告信息,如何解决此问题?
感谢。
答案 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]);
}
}
}