簡體   English   中英

如何切換網格布局中的窗口小部件可見性?

[英]How can i toggle a widget visibility that is in a grid layout?

我想做一個列表,當用戶更改一個spinbox的值時,它會改變它的字段數。 像這樣的東西:

默認情況下前5個字段

然后只有1個字段

如果用戶想要再次更改它,他可以再次放置5個字段。

我制作了一個GridLayout和幾個QList,一個用於標簽,另一個用於LineEdits。 我這樣做了:

我創建了一個基本案例(只有1個字段),后來我添加了更多關於執行時間添加Widgets到GridLayout的執行時間:

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

其中label是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

在下面的示例中,我將向您展示如何使用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;
        }
    }
}

加:

在此輸入圖像描述

去掉:

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM