在Qt中进行布局

时间:2018-07-26 09:46:46

标签: qt qt5

我刚刚开始使用Grid进行布局。我试图使用HBoxlayout和VBoxlayout使其实现。但是如何设置布局的位置。我搜索了一下,找到了setAlignment选项,但是它没有用。 那么,如何处理像图像这样的布局呢?

这是我要制作的布局

check this out

#include "mainscreen.h"
#include "ui_mainscreen.h"
#include<QLayout>
#include<QPushButton>

MainScreen::MainScreen(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MainScreen)
{
    ui->setupUi(this);
    QGridLayout *layout=new QGridLayout;
    QHBoxLayout *hlayout=new QHBoxLayout;
    QPushButton *x=new QPushButton;
    hlayout->setAlignment(Qt::AlignTop);
    hlayout->addWidget(x);
    layout->addChildLayout(hlayout);


this->setLayout(layout);
    this->show();
}

MainScreen::~MainScreen()
{
    delete ui;
}

3 个答案:

答案 0 :(得分:0)

您可以在Qt的{t {3}}

中找到有关布局的详细信息。

对您的布局很重要的两件事:

  1. 您需要嵌套几个布局。主布局将是一个VBoxlayout,其中包含顶部和底部的Widget,中间包含一个HBoxLayout。 HBoxLayout包含其他两个小部件。
  2. 两个中间窗口的大小会有所不同,您需要为布局指定拉伸因子或为小部件定义大小。

答案 1 :(得分:0)

您可以考虑执行以下操作

    QHBoxLayout *TopLayout    = new QHBoxLayout;
    QHBoxLayout *BottomLayout = new QHBoxLayout;
    QHBoxLayout *MiddleLayout = new QHBoxLayout;

    QVBoxLayout *mainLayout = new QVBoxLayout;

    QPushButton *topBtn         = new QPushButton;
    QPushButton *bottomBtn      = new QPushButton;
    QPushButton *LeftMiddleBtn  = new QPushButton;
    QPushButton *RightMiddleBtn = new QPushButton;

    TopLayout->addWidget(topBtn);
    BottomLayout->addWidget(bottomBtn);
    // order matters here (i.e. the first addWidget will be placed in the left)
    MiddleLayout->addWidget(LeftMiddleBtn);
    MiddleLayout->addWidget(RightMiddleBtn);

    // order matters here
    mainLayout->addLayout(TopLayout);
    mainLayout->addLayout(MiddleLayout);
    mainLayout->addLayout(BottomLayout);

    setLayout(mainLayout);

更方便,更正确的方法是使用Qt Designer或Qt Creator解决此问题。

答案 2 :(得分:0)

QMainWindow是一个空间案例。它已经设置了布局,并且无法在小部件中更改布局!原因是QMainWindow还有许多其他功能,例如菜单,停靠,状态栏。

那么如何使其工作呢?

您必须set central widget

MainScreen::MainScreen(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MainScreen)
{
    ui->setupUi(this);

    auto widget = new QWidget();
    setCentalWidget(widget);

    auto vLayout = new QVBoxLayout(widget);
    // add your stuff here
    // some example for testing:
    vLayout->addWidget(new QButton("Test button"));
    vLayout->addWidget(new QLabel("Nice label"));
    vLayout->addWidget(new QTextEdit);
}

您也做错了,因为此行ui->setupUi(this);表示您正在使用Qt Designer(通过鼠标设计ui),这意味着不应直接通过代码设置布局!