繁体   English   中英

如何从布局 QT 中正确删除 QWidget?

[英]How to properly delete QWidget from layout QT?

我知道,我可以从 QLayout 中删除 QWidget,这样:

        QLayoutItem*item = wlay->takeAt(0);
        wlay->removeItem(item);
        delete item;
        delete w; 

但是,如果不删除 QWidget(delete w),小部件将出现在屏幕上。 但是,我无法删除小部件,因此小部件将显示在屏幕上。 从布局中删除小部件后如何从屏幕上删除小部件? 例如,我有这样的代码:

class QTest: public QWidget{
    Q_OBJECT

    QVBoxLayout* wlay;
    QPushButton* b;
public:
    QTest(){
        wlay = new QVBoxLayout();
        b = new QPushButton("click");
        for(int i = 0; i < 20; i++)
            wlay->addWidget(new QLabel( "TEST" + QString::number(i)));
        wlay->addWidget(b);
        this->setLayout(wlay);
        connect(b, &QPushButton::clicked, this, &QTest::doit);
    }
public slots:
    void doit();
};
void QTest::doit(){
    //Removing all QLabel from Layout
    for(int i =0; i < 20; i++){
        QLayoutItem*item = wlay->takeAt(0);
        wlay->removeItem(item);
        delete item;
    }
}

去除标签之前 去除标签后

从布局中删除 QLabels 后,标签会显示在屏幕上。 如何从主小部件中删除它们(不删除它们)?

您正在寻找的 function 似乎是QWidget::hide()


此外,一旦你调用QLayout::takeAt() ,你就不必再调用QLayout::removeItem()了,因为前者已经删除了文档中提到的项目。

您可以将QLayout::takeAt()视为QLayout::itemAt() + QLayout::removeItem()的简写。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM