Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何切换网格布局中的小部件可见性?_C++_Qt_Qt5_Qgridlayout - Fatal编程技术网

C++ 如何切换网格布局中的小部件可见性?

C++ 如何切换网格布局中的小部件可见性?,c++,qt,qt5,qgridlayout,C++,Qt,Qt5,Qgridlayout,我想做一个列表,当用户更改spinbox的值时,它会更改字段编号。 大概是这样的: 默认情况下,前5个字段 例如,只有1个字段 如果用户想再次更改它,他可以再次放置5个字段 我制作了一个GridLayout和两个QList,一个用于标签,另一个用于线条编辑。我这样做: 我创建了一个基本案例(只有一个字段),稍后我通过以下方式添加了更多关于执行时间的内容:向GridLayout添加小部件: gridLayout->addWidget(labels.at(x), 0, 1) 其中标签是Q

我想做一个列表,当用户更改spinbox的值时,它会更改字段编号。 大概是这样的:

默认情况下,前5个字段

例如,只有1个字段

如果用户想再次更改它,他可以再次放置5个字段

我制作了一个GridLayout和两个QList,一个用于标签,另一个用于线条编辑。我这样做:

我创建了一个基本案例(只有一个字段),稍后我通过以下方式添加了更多关于执行时间的内容:向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)

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

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

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;
        }
    }
}
void Dialog::on\u spinBox\u值已更改(int arg1)
{
int neelements=labels.count();
//加
如果(arg1>元素){
对于(int i=n元素;igridLayout->addWidget(标签,i,0,1,1);
ui->gridLayout->addWidget(行,i,1,1,1);
}
}
//除去
else if(arg1<元素){
for(int i=arg1;igridLayout->removeWidget(标签);
ui->gridLayout->removeWidget(行);
标签。移除(i);
行。删除(i);
删除标签;
删除行;
}
}
}
加:

删除:


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

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

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;
        }
    }
}
void Dialog::on\u spinBox\u值已更改(int arg1)
{
int neelements=labels.count();
//加
如果(arg1>元素){
对于(int i=n元素;igridLayout->addWidget(标签,i,0,1,1);
ui->gridLayout->addWidget(行,i,1,1,1);
}
}
//除去
else if(arg1<元素){
for(int i=arg1;igridLayout->removeWidget(标签);
ui->gridLayout->removeWidget(行);
标签。移除(i);
行。删除(i);
删除标签;
删除行;
}
}
}
加:

删除:


谢谢,它可以工作,但为什么我不能只设置可见(false)和稍后设置可见(true)?假设Qlist有从1到5的预定义值(这是spinbox的范围)。谢谢,它可以工作,但为什么我不能只设置可见(false)和稍后的设置可见(true)?假设Qlist具有从1到5的预定义值(这是spinbox的范围)。