1

当用户更改旋转框的值时,我想做一个更改其字段编号的列表。像这样的东西:

默认前 5 个字段

然后例如只有1个字段

而如果用户想再改一次,他可以再放5个字段。

我制作了一个 GridLayout 和几个 QList,一个用于标签,另一个用于 LineEdits。我这样做了:

我创建了一个基本案例(只有 1 个字段),然后我在执行时添加了更多内容,通过以下方式将小部件添加到 GridLayout:

gridLayout->addWidget(labels.at(x), 0, 1)

其中标签是 QList。添加小部件可以正常工作,但我无法删除并再次添加。

我尝试使用

gridLayout->removeWidget(lables.at(x), 0, 1)
labels.at(x)->hide()
label.at(x)->setVisible(false)

一切正常,但我无法再次展示它:

gridLayout->addWidget(labels.at(x), 0, 1)
labels.at(x)->show()
label.at(x)->setVisible(true)
4

1 回答 1

0

布局是小部件几何形状的处理程序。如果您使用该removeWidget()功能,您只会从布局中删除该元素,但它仍然可见。如果您希望它不可见,则必须使用 删除它delete

在下面的示例中,我将向您展示如何使用QSpinBoxvalueChanged的信号添加和删除小部件。

void Dialog::on_spinBox_valueChanged(int arg1)
{

    int nElements = labels.count();

    //add
    if(arg1 > nElements){
        for(int i=nElements; i < arg1; i++){
            QLabel *label = new QLabel(QString::number(i), this);
            QLineEdit *line = new QLineEdit(QString::number(i), this);
            labels.append(label);
            lines.append(line);
            ui->gridLayout->addWidget(label, i, 0, 1, 1);
            ui->gridLayout->addWidget(line, i, 1, 1, 1);
        }
    }

    //remove
    else if(arg1 < nElements){
        for(int i=arg1; i < nElements; i++){
            QLabel *label = labels.at(i);
            QLineEdit *line = lines.at(i);
            ui->gridLayout->removeWidget(label);
            ui->gridLayout->removeWidget(line);
            labels.removeAt(i);
            lines.removeAt(i);
            delete label;
            delete line;
        }
    }
}

添加:

在此处输入图像描述

消除:

在此处输入图像描述

于 2017-03-27T03:17:12.653 回答