我想用「擾流板」編寫對話框。當我顯示/隱藏某些元素時,表單必須調整大小以匹配她的內容。但我注意到minimumSizeHint有些延遲。比如我寫下面的對話框代碼:Qt QWidget :: 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());
}
當按下按鈕1,形式不是她緊緊的內容相匹配,但是當按下按鈕2 ,表格與她的內容緊密匹配。 如何在沒有定時器和其他解決方法的情況下按下按鈕2來實現結果?爲什麼button1不起作用?
你有定時器的內存泄漏。每次按下'button2'時,都會創建'QTimer'對象。所有的計時器都留在記憶中,直到你破壞對話。它可以通過下面的方式修復:'QTimer :: singleShot(0,this,&Dialog :: adjust);'。 'adjust'必須是一個插槽。我不明白你的lambdas的開銷。 – 2015-04-04 15:37:48