Qt - 编译器在我的主窗口上调用 setLayout() 时抱怨

Qt - Compiler complains when invoking setLayout() on my MainWindow

本文关键字:setLayout 调用 编译器 我的 窗口 Qt      更新时间:2023-10-16

我想学习如何在没有设计师的情况下手动创建 GUI。我试图向我的MainWindow添加布局,但在运行时显示

QWidget::setLayout:尝试在已经有布局的 MainWindow " 上设置 QLayout "

这是我的代码:

//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 );
}

现在,您无需将布局添加/设置到主窗口。您可以添加/设置它到中央小部件。