【问题标题】:layout does not work in Visual Studio 2015?布局在 Visual Studio 2015 中不起作用?
【发布时间】:2017-08-04 14:31:39
【问题描述】:

我想在 qt5 中使用布局,但在 Visual Studio 2015 中布局不起作用?

这是我的代码:

layout.h 代码

#ifndef LAYOUT_H
#define LAYOUT_H

#include <QtWidgets/QMainWindow>
#include "ui_layout.h"

class layout : public QMainWindow
{
    Q_OBJECT

public:
    layout(QWidget *parent = 0);
    ~layout();

private:
    Ui::layoutClass ui;
};

#endif // LAYOUT_H

ma​​in.cpp

#include "layout.h"
#include <QtWidgets/QApplication>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QHBoxLayout>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    layout w;
    QHBoxLayout hb;
    QPushButton b("button 0");
    QPushButton b1("button 1");

    hb.addWidget(&b);
    hb.addWidget(&b1);

    w.setLayout(&hb);
    w.show();
    return a.exec();
}

这是我的结果:

如何解决这个问题?

【问题讨论】:

  • 什么是布局?
  • @eyllanesc QHBoxLayout 和 QVBoxLayout
  • QVBoxLayout 和 QHBoxLayout 没有 show 方法。
  • @eyllanesc 我已经添加了头文件。
  • @eyllanesc 我不使用 Qt Designer。

标签: c++ qt visual-c++ qt5


【解决方案1】:

QMainWindow 是一个特殊的小部件,因为它具有 QStatusbar、QMenuBar 等默认小部件。使用此小部件时,我们必须将新元素放置在 centralWidget 中。

所以我们必须分配一个小部件作为我们的 centralWidget,然后我们添加如下所示的布局:

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    layout w;
    w.setCentralWidget(new QWidget);


    QHBoxLayout hb;
    QPushButton b("button 0");
    QPushButton b1("button 1");

    hb.addWidget(&b);
    hb.addWidget(&b1);

    w.centralWidget()->setLayout(&hb);
    w.show();

    return a.exec();
}

【讨论】:

  • 这个解决方案可以解决我的问题,但我不完全明白为什么我们必须使用centralWidget。你能给我一些文章或文件吗?我会阅读这些信息。
  • 我的回答的第一个词有一个链接,这是主要的文档,但如果你还没有看到它是:doc.qt.io/qt-5/qmainwindow.html。请不要忘记将我的答案标记为正确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-01
  • 2017-06-07
  • 1970-01-01
  • 2016-06-15
  • 1970-01-01
相关资源
最近更新 更多