【问题标题】:How can i toggle a widget visibility that is in a grid layout?如何切换网格布局中的小部件可见性?
【发布时间】:2017-03-27 01:58:16
【问题描述】:

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

默认前 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)

【问题讨论】:

    标签: c++ qt qt5 qgridlayout


    【解决方案1】:

    布局是小部件几何形状的处理程序。如果您使用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;
            }
        }
    }
    

    添加:

    删除:

    【讨论】:

    • 谢谢,它有效,但为什么我不能只 setVisible(false) 和后来的 setVisible(true)?假设 Qlist 有从 1 到 5 的预定义值(这就是 spinbox 的范围)。
    猜你喜欢
    • 2017-06-11
    • 2017-11-10
    • 1970-01-01
    • 1970-01-01
    • 2020-04-10
    • 2014-01-10
    • 2014-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多