宣告: QHBoxLayout *hboxProgress; QLabel *white_label; QProgressBar *remember_label;建構式里初始化: hboxProgress = new QHBoxLayout(); hboxProgress->addWidget(white_label); hboxProgress->addStretch(1); hboxProgress->setSpacing(40); hboxProgress->setContentsMargins(0, 0, 0, 0); white_label = new QLabel(); white_label->setFixedSize(160, 10); remember_label = new QProgressBar(); remember_label->setFixedSize(160, 10); remember_label->setRange(0,100); remember_label->setValue(0); m_state=false;登錄按鈕對應的函式:void LoginDialog::verify(){ if(!m_state) { title_label->setText(tr("test 111")); // 始終有效 hboxProgress->removeWidget(white_label); hboxProgress->addWidget(remember_label); // 第一次切換有效,之后無效 hboxProgress->invalidate(); // 加上仍無效 hboxProgress->update(); // 加上仍無效 m_state=true; } else { title_label->setText(tr("test 222")); // 始終有效 hboxProgress->removeWidget(remember_label); hboxProgress->addWidget(white_label); // 問題在這里:從未生效(至少從未被顯示) hboxProgress->invalidate(); // 加上仍無效 hboxProgress->update(); // 加上仍無效 m_state=false; }}其實我就是要做一個登錄框,但是在驗證用戶資料的時候,顯示一個進度條,否則就顯示一個Label。但是QHBoxLayout里動態設定Widget的時候不成功,請各位大大指教,非常感謝!
uj5u.com熱心網友回復:
你show/hide不就行了?uj5u.com熱心網友回復:
我把你說的這個效果實作了,親測無誤.......ui中把你說的white_label 和 remember_label放在同一個布局里,切換顯示代碼如下:Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget){ ui->setupUi(this); flag = false; ui->horizontalLayout->removeWidget(ui->label); // hide the label init. ui->label->setVisible(false);}//這里我用一個槽來實作切換顯示 void Widget::on_pushButton_clicked() { if(!flag) { ui->horizontalLayout->removeWidget(ui->progressBar); ui->horizontalLayout->addWidget(ui->label); ui->progressBar->setVisible(false); ui->label->setVisible(true); } else { ui->horizontalLayout->removeWidget(ui->label); ui->horizontalLayout->addWidget(ui->progressBar); ui->progressBar->setVisible(true); ui->label->setVisible(false); } flag = !flag;}uj5u.com熱心網友回復:
謝謝樓上,根據你的啟發,我也加上了setVisible函式,原來是因為它的原因。不過這樣夠麻煩的,切換了還不夠,還要手動更改控制元件的現實狀況。不知道QT這樣做有它的什么理由?不過作為一個開發出KDE的軟體庫,理應敬佩它,而不是懷疑。。。PS,或許可以考慮使用QStackedLayoutuj5u.com熱心網友回復:
qlayout只是負責管理qwidget的大小、位置,不會去控制組件的可視與否的uj5u.com熱心網友回復:
把widget從布局中移除后, 還需要對這個widget使用setParent(null)轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/283273.html
標籤:其他技術討論專區
下一篇:Mac如何匯出求最新微信表情包
