需要知识点:
QGridLayout 网格布局管理器
QHBoxLayout 水平的布局嵌套器
QVBoxLayout 垂直的布局嵌套器(可以理解为你在界面上创建了布局,然后里面再嵌套一个水平或者垂直布局)
QFormLayout 表格布局
QStackedLayout 层叠布局
这里布局是可以嵌套的
关于这块内容可以详细看下这个博客内容很详细:
Qt学习之路14--布局管理器(QGridLayout)_一念之间、-CSDN博客_qgridlayout
然后这些布局如果复杂点的,可能会很难处理,比如下面这样,所以简单点布局可以这样弄。
下面说说要怎么创建和管理这些控件
比如:我们现在有个需求要你根据数据类型创建相应的文本控件 。要怎么做呢?
1.首先肯定确定数据类型然后再确定创建什么类型控件
// 手写csdn这个布局好乱啊 懒得弄了
//.h里保存创建的控件
QVector<QObject *> save_edit;
//cpp文件
void createide(int row)
{
QVariant::type type = "你的数据"
switch(type)
{
case QVariant::Int:
{
// this 是当前界面
QSpinBox *spinbox = new QSpinBox(this);
// layout 是布局管理器
layout->addWidget(spinbox, row, 2, 1, 1);
save_edit.append(spinbox);
break;
}
case QVariant::Double:
{
// this 是当前界面
QDoubleSpinBox *spinbox = new QDoubleSpinBox(this);
// layout 是布局管理器
layout->addWidget(spinbox, row, 2, 1, 1);
save_edit.append(spinbox);
break;
}
case QVariant::String:
{
QLineEdit *edit = new QLineEdit(this);
layout->addWidget(lineedit, row, 2, 1, 1);
save_edit.append(spinbox);
break;
}
}
}
// 在这个创建完成函数调用后面添加一个QScollarea控件并把布局添加进去,至于为啥最后写的有
// ui.scrollarea->widget()->setLayout(_layout);
2.根据创建的类型操作
这里操作比如获取创建控件值
QString getide(int row)
{
auto type = save_edit.at(row);
if(type->inherits(QComboBox))
{
QComboBox *result = qobject_cast<QComboBox *>(_save_edit.at(id));
return result->currentText();
}
else if(type->inherits(QDoubleSpinBox))
{
QDoubleSpinBox *result = qobject_cast<QDoubleSpinBox *>(_save_edit.at(id));
return QString::number(result->value(),'f',2);
}
// 省略其他类型
}
然而呢,你上面弄完了,会发现一个问题就是你控件创建多了,就会挤在一起,这里建议加一个QScrollArea控件,把布局管理器塞到里面就可以了。
QT的自动滚动区QScrollArea的用法,图文详解_野生猿-群号1025127672-CSDN博客_qscrollarea