我刚刚开始使用Grid进行布局。我试图使用HBoxlayout和VBoxlayout使其实现。但是如何设置布局的位置。我搜索了一下,找到了setAlignment选项,但是它没有用。 那么,如何处理像图像这样的布局呢?
这是我要制作的布局
#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;
}
答案 0 :(得分:0)
您可以在Qt的{t {3}}
中找到有关布局的详细信息。对您的布局很重要的两件事:
答案 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
还有许多其他功能,例如菜单,停靠,状态栏。
那么如何使其工作呢?
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),这意味着不应直接通过代码设置布局!