一、类似于这样的效果图
由于对象不确定有多少人,所以使用代码,在布局中添加部件,如果一行撑不下,则自动添加到第二行。
二、使用FlowLayout
FlowLayout是一个自定义布局类,它可以水平和垂直地排列其子小部件,可以使小部件的位置根据应用程序窗口的宽度而变化
#include <FlowLayout.h>
void MainDialogForm::setView()
{
//1.在滚路区域中添加FlowLayout类型的布局
FlowLayout *layout = new FlowLayout(ui->scrollArea);
bool flag = true;
QMap<int, QString>::const_iterator i = contact.constBegin();
while(i != contact.constEnd()) {
//2.需要添加多少个按钮,就new多少个QRadioButton,并构造按钮名称
QRadioButton *button = new QRadioButton(i.value());
layout->addWidget(button);
//3.绑定按钮被选中的信号
connect(button, &QRadioButton::clicked, this,&MainDialogForm::onSetWxId);
m_radio[button] = i.value();
++i;
//4.默认选中第一个控件(必须在绑定信号之后设置,否则无法进入槽函数)
if (flag) {
button->click();
flag = false;
}
}
}
void MainDialogForm::onSetWxId()
{
//按钮被点击触发槽函数
QRadioButton *button = dynamic_cast<QRadioButton *>(sender());
QMap<QRadioButton*, QString>::const_iterator i = m_radio.constBegin();
while(i != m_radio.constEnd()) {
if (button == i.key()) {
QString info = i.value();
}
++i;
}
}