[英]Qt QWidget::minimumSizeHint delay
我想用“擾流板”編寫對話框。 當我顯示/隱藏某些元素時,表單必須調整大小以匹配她的內容。 但是我注意到minimumSizeHint會有一些延遲。 例如,我編寫了以下對話框代碼:
dialog.h
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
class Dialog : public QDialog {
Q_OBJECT
public:
explicit Dialog(QWidget *parent = 0);
private:
QPushButton *button1, *button2, *button3;
void adjust();
};
#endif // DIALOG_H
dialog.cpp
#include <QVBoxLayout>
#include <QPushButton>
#include <QTimer>
#include "dialog.h"
Dialog::Dialog(QWidget *parent) :
QDialog(parent) {
QVBoxLayout *layout = new QVBoxLayout;
button1 = new QPushButton("bad method", this);
button2 = new QPushButton("working method", this);
button3 = new QPushButton("indent", this);
layout->addWidget(button1);
layout->addWidget(button2);
layout->addWidget(button3);
setLayout(layout);
connect(button1, &QPushButton::pressed, [=]() {
button3->setVisible(!button3->isVisible());
adjust();
});
connect(button2, &QPushButton::pressed, [=]() {
button3->setVisible(!button3->isVisible());
QTimer *timer = new QTimer(this);
connect(timer, &QTimer::timeout, [=](){ adjust(); });
timer->setSingleShot(true);
timer->start(0);
});
}
void Dialog::adjust() {
resize(width(), minimumSizeHint().height());
}
按下button1時,表單與她的內容不完全匹配,但是按下button2時,表單與她的內容緊密匹配。 在沒有計時器和其他變通方法的情況下,如何獲得按button2的效果? 為什么button1不起作用?
考慮到只有在事件循環中處理了一些事件之后,才計算最小大小。 如果您不想使用計時器,一種解決方法是在按鈕隱藏或顯示后處理事件循環進行某些迭代,然后調整大小。
就像是 :
button3->setVisible(!button3->isVisible());
for(int i=0;i<10;i++)
qApp->processEvents();
adjust();
更好的解決方案是在調整大小之前調用QLayout::activate()
:
button3->setVisible(!button3->isVisible());
layout->activate();
adjust();
activate()
強制您的布局重新計算大小提示。
我嘗試了QLayout::activate()
解決方案,但對我而言不起作用。
QLayout::activate()
返回false
。
這是我的代碼: this
是QMainWindow
。
ui.groupBox->setVisible(!ui.groupBox->isVisible());
qDebug() << this->layout()->activate();
qDebug() << this->minimumSizeHint();
this->resize(this->minimumSizeHint());
任何想法為什么它不起作用?
我當前的解決方法是:
QTimer::singleShot(10, this, SLOT(on_resizeMin()));
但我注意到10ms在慢速系統上可能還不夠。 討厭的解決方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.