QFormLayout 类管理输入小部件的表单及其关联的标签。
QFormLayout 是一个方便的布局类,它以两列形式布置其子项。 左列由标签组成,右列由“字段”小部件(行编辑器、旋转框等)组成。
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QLineEdit>
#include <QFormLayout>
#include <QDebug>
#include <QLabel>
#include <QString>
#include <QVBoxLayout>
#include <QPushButton>
#include <QDialog>
#include <QLabel>
class Widget : public QWidget
{
Q_OBJECT
protected:
QString FetchCnString(const char* s);
QPushButton m_pushBtn1;
QPushButton m_pushBtn2;
QPushButton m_pushBtn3;
private slots:
void OnButton1();
void OnButton2();
void OnButton3();
public:
Widget(QWidget *parent = nullptr);
~Widget();
};
#endif // WIDGET_H
#include "Widget.h"
Widget::Widget(QWidget *parent) : QWidget(parent), m_pushBtn1(this), m_pushBtn2(this), m_pushBtn3(this)
{
QVBoxLayout* vLayout = new QVBoxLayout();
m_pushBtn1.setText(FetchCnString("第1种"));
m_pushBtn2.setText(FetchCnString("第2种"));
m_pushBtn3.setText(FetchCnString("第3种"));
vLayout->addWidget(&m_pushBtn1);
vLayout->addWidget(&m_pushBtn2);
vLayout->addWidget(&m_pushBtn3);
connect(&m_pushBtn1, SIGNAL(clicked()), this, SLOT(OnButton1()));
connect(&m_pushBtn2, SIGNAL(clicked()), this, SLOT(OnButton2()));
connect(&m_pushBtn3, SIGNAL(clicked()), this, SLOT(OnButton3()));
setLayout(vLayout);
}
QString Widget::FetchCnString(const char *s)
{
return QString::fromLocal8Bit(s);
}
void Widget::OnButton1()
{
//qDebug() << "Widget::OnButton1()";
QDialog dialog(this);
QLabel* label = new QLabel();
QFormLayout* fLayout = new QFormLayout();
label->setText(FetchCnString("第1种"));
label->setAlignment(Qt::AlignCenter);
label->setStyleSheet("font-size:20px");
fLayout->addRow(label);
QLineEdit* edit1 = new QLineEdit(&dialog);
fLayout->addRow(FetchCnString("姓名:"), edit1);
QLineEdit* edit2 = new QLineEdit(&dialog);
fLayout->addRow(FetchCnString("年龄:"), edit2);
QLineEdit* edit3 = new QLineEdit(&dialog);
fLayout->addRow(FetchCnString("组别"), edit3);
QLineEdit* edit4 = new QLineEdit(&dialog);
fLayout->addRow(FetchCnString("组别"), edit4);
fLayout->setLabelAlignment( Qt::AlignLeft);
fLayout->setRowWrapPolicy(QFormLayout::WrapAllRows);
dialog.setLayout(fLayout);
int ret = dialog.exec();
qDebug() << ret;
}
void Widget::OnButton2()
{
QDialog dialog(this);
QLabel* label = new QLabel();
QFormLayout* fLayout = new QFormLayout();
label->setText(FetchCnString("第2种"));
label->setAlignment(Qt::AlignCenter);
label->setStyleSheet("font-size:20px");
fLayout->addRow(label);
QLineEdit* edit1 = new QLineEdit(&dialog);
fLayout->addRow(FetchCnString("姓名:"), edit1);
QLineEdit* edit2 = new QLineEdit(&dialog);
fLayout->addRow(FetchCnString("年龄:"), edit2);
QLineEdit* edit3 = new QLineEdit(&dialog);
fLayout->addRow(FetchCnString("组别:"), edit3);
QLineEdit* edit4 = new QLineEdit(&dialog);
fLayout->addRow(FetchCnString("组别aaaaaaaaaaaaaaaaaaaaaaaaaaa"), edit4);
fLayout->setLabelAlignment( Qt::AlignLeft);
fLayout->setRowWrapPolicy(QFormLayout::DontWrapRows);
fLayout->setLabelAlignment(Qt::AlignRight);
dialog.setLayout(fLayout);
dialog.exec();
}
void Widget::OnButton3()
{
QDialog dialog(this);
QLabel* label = new QLabel();
QFormLayout* fLayout = new QFormLayout();
label->setText(FetchCnString("第3种"));
label->setAlignment(Qt::AlignCenter);
label->setStyleSheet("font-size:20px");
fLayout->addRow(label);
QLineEdit* edit1 = new QLineEdit(&dialog);
fLayout->addRow(FetchCnString("姓名:"), edit1);
QLineEdit* edit2 = new QLineEdit(&dialog);
fLayout->addRow(FetchCnString("年龄:"), edit2);
QLineEdit* edit3 = new QLineEdit(&dialog);
fLayout->addRow(FetchCnString("组别:"), edit3);
QLineEdit* edit4 = new QLineEdit(&dialog);
fLayout->addRow(FetchCnString("组别aaaaaaaaaaaaaaaaaaaaaaaaaaa"), edit4);
fLayout->setLabelAlignment( Qt::AlignLeft);
fLayout->setRowWrapPolicy(QFormLayout::WrapLongRows);
dialog.setLayout(fLayout);
dialog.exec();
}
Widget::~Widget()
{
}
运行效果图: