我知道,我可以從 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 后,標簽會顯示在螢屏上。如何從主小部件中洗掉它們(不洗掉它們)?
uj5u.com熱心網友回復:
您正在尋找的功能似乎是QWidget::hide().
此外,一旦你打電話QLayout::takeAt(),你就不必再打電話QLayout::removeItem()了,因為前者已經洗掉了檔案中提到的專案。
您可以將QLayout::takeAt()其視為QLayout::itemAt() 的簡寫QLayout::removeItem()。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/509846.html
標籤:C qt
