gpt4 book ai didi

c++ - Qt - 编译器在我的 MainWindow 上调用 setLayout() 时报错

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:52:37 27 4
gpt4 key购买 nike

我想学习如何在没有设计器的情况下手工创建图形用户界面。我试图向我的 MainWindow 添加布局,但在运行时显示

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

这是我的代码:

//Header
class MainWindow : public QMainWindow
{
Q_OBJECT

public:
MainWindow(QWidget *parent = 0);
~MainWindow();
private:
QHBoxLayout *layout;
};

//Constructor in my *.cpp
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
layout = new QHBoxLayout;
this->setLayout(layout);
}

//The usual main function
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();

return a.exec();
}

怎么了?我按照书上说的做了。我什至在互联网上查找了一些很难找到的代码,但它仍然是一样的。我只是无法向我的窗口添加布局。

最佳答案

有一个类似的问题帮助我找出问题所在。感谢 Mat 链接到该问题。

每个 QMainWindow 都需要一个 QWidget 作为中央小部件。我还与设计器一起创建了一个新项目,对其进行了编译并查找了 ui_*.h 文件。

所以每个 QMainWindow 应该看起来像这样:

//Header
class MainWindow : public QMainWindow
{
Q_OBJECT
QWidget *centralWidget;
QGridLayout* gridLayout;

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

};

//*.cpp
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
centralWidget = new QWidget(this);
this->setCentralWidget( centralWidget );
gridLayout = new QGridLayout( centralWidget );
}

现在您无需将布局添加/设置到 MainWindow。您将它添加/设置到 centralWidget。

关于c++ - Qt - 编译器在我的 MainWindow 上调用 setLayout() 时报错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18947375/

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