Qt: 无法在QMainWindow中设置布局

20

我正在尝试在我的主窗口中设置布局(使用setLayout()),但是启动时没有显示任何内容:

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0)
    {
        QVBoxLayout *vBoxLayout = new QVBoxLayout;
        {
            QPushButton *pushButton = new QPushButton(tr("A button"));
            vBoxLayout->addWidget(pushButton);
        }
        setLayout(vBoxLayout);
    }
};

这段代码无法编译。你不能分配一个抽象类型为 QLayout 的对象。请看末尾附近的那行代码 new QLayout - Cory Klein
1个回答

40

您需要将代码的最后两行更改为以下内容:

QWidget *widget = new QWidget();
widget->setLayout(VBoxLayout);
setCentralWidget(widget);
//VBoxLayout->addWidget(new QLayout);
//setLayout(VBoxLayout);

QMainWindow是一种特殊情况。您可以通过将布局放在新的QWidget中,然后将其设置为中央小部件来设置此小部件的内容。
另请参见此答案


1
好的,谢谢!为什么有一个setLayout空方法却没有任何作用呢? - feedc0de
没有 setLayout(void*)。请参阅 http://qt-project.org/doc/qt-4.8/qwidget.html#setLayout。而且 setLayout() 不会“什么都不做”,它会在小部件上设置布局。但是,如果您在运行该函数时查看应用程序输出,您应该会看到一个错误,指出已经设置了布局。请参阅早期关于 setLayout() 的文档以解释此错误。 - Cory Klein
有人编辑了原始提交吗?我无法弄清楚要替换哪两行,也无法弄清楚生成的代码是什么样子。请问能否在答案中添加一个附加部分,展示最终的答案?谢谢。 - Mads Skjern

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接