mainwindow.cpp :
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFormLayout>
#include <QLabel>
#include <QLineEdit>
#include <QFrame>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
QFrame* loginForm = new QFrame(this);
QFormLayout* loginFormLayout = new QFormLayout(loginForm);
QLabel* LogInLabel = new QLabel("<h1> Login </h1>", this);
QLabel* UsernameLabel = new QLabel("Username: ", this);
QLabel* PasswordLabel = new QLabel("Password: ", this);
QLineEdit* usernameLineEdit = new QLineEdit();
QLineEdit* passwordLineEdit = new QLineEdit();
usernameLineEdit -> setFrame(false);
usernameLineEdit -> setMaxLength(30);
passwordLineEdit -> setFrame(false);
passwordLineEdit -> setMaxLength(30);
LogInLabel -> setStyleSheet("QLabel { font-family: Arial font-weight: bold }");
loginFormLayout -> setHorizontalSpacing(0);
loginFormLayout -> setVerticalSpacing(0);
loginFormLayout -> addRow(UsernameLabel, usernameLineEdit);
loginFormLayout -> addRow(PasswordLabel, passwordLineEdit);
loginFormLayout -> setFieldGrowthPolicy(QFormLayout::FieldsStayAtSizeHint);
loginFormLayout -> setFormAlignment(Qt::AlignHCenter | Qt::AlignTop);
loginForm -> setLayout(loginFormLayout);
loginForm -> setFrameStyle(QFrame::Panel | QFrame::Plain);
loginForm -> setFrameRect(QRect(440, 134, 400, 300));
loginForm -> setLineWidth(20);
this -> setCentralWidget(loginForm);
}
MainWindow::~MainWindow()
{
delete ui;
}
我没有更改mainwindow.h
中的任何内容。我想要一个带有 QFormLayout 的 QFrame ,里面包含两行 QLabel-QLineEdit 对。我想整个事情是400px宽和300px高, QFrame 的左上角在(440,134)。你能帮我找出为什么我没有达到上述结果吗?
答案 0 :(得分:0)
使用QMainWindow::setCentralWidget
会导致作为参数传递的窗口小部件成为 QMainWindow 布局的主题,因此其大小由此时的布局管理。要达到预期效果,请执行以下操作:
QFrame::setFrameRect
使用QFrame::setGeometry
this -> setCentralWidget(loginForm)