无法更改QFrame的大小

时间:2017-07-23 10:42:38

标签: c++ forms login qt5

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)。你能帮我找出为什么我没有达到上述结果吗?

1 个答案:

答案 0 :(得分:0)

使用QMainWindow::setCentralWidget会导致作为参数传递的窗口小部件成为 QMainWindow 布局的主题,因此其大小由此时的布局管理。要达到预期效果,请执行以下操作:

  1. 而不是QFrame::setFrameRect使用QFrame::setGeometry
  2. 评论this -> setCentralWidget(loginForm)