Qt - 在我的MainWindow上调用setLayout()时编译器会抱怨

时间:2013-09-22 18:32:33

标签: c++ qt layout

我想学习如何在没有设计师的情况下手工制作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();
}

有什么问题?我做了我的书所说的。我甚至在互联网上查找了一些代码很难找到的代码,它仍然是相同的。我只是无法在窗口中添加布局。

1 个答案:

答案 0 :(得分:19)

有一个类似的问题帮我找出了什么问题。感谢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。