У меня есть простое диалоговое окно с горизонтальной разметкой и QLable в нем. QLable содержит изображение. Я использую событие изменения размера, чтобы масштабировать это изображение, чтобы соответствовать размеру окна.
Я использовал код из примера QT. Заголовок:
#ifndef SCALEIMGDIALOG_H
#define SCALEIMGDIALOG_H
#include <QDialog>
#include <QLabel>
namespace Ui {
class ScaleImgDialog;
}
class ScaleImgDialog : public QDialog
{
Q_OBJECT
public:
explicit ScaleImgDialog(QWidget *parent = 0);
~ScaleImgDialog();
protected:
void resizeEvent(QResizeEvent *event) override;
private:
Ui::ScaleImgDialog *ui;
QPixmap testImg;
};
#endif
и исходный файл:
#include <QDebug>
#include "scaleImgDialog.h"
#include "ui_scaleImgDialog.h"
// main dialog window name is ScaleImgDialog ui_scaleImgDialog.h is generated automatically
ScaleImgDialog::ScaleImgDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::ScaleImgDialog),
testImg(":/images/testImg.jpeg")
{
ui->setupUi(this);
setWindowFlags(windowFlags() ^ Qt::WindowContextHelpButtonHint);
setWindowFlags(windowFlags() | Qt::WindowMaximizeButtonHint);
}
ScaleImgDialog::~ScaleImgDialog()
{
delete ui;
}
void ScaleImgDialog::resizeEvent(QResizeEvent *)
{
int newHeight = height();
newHeight -= newHeight / 10; // to prevent recursive resizing
// Image heigh is much bigger then width so i use scaling by it
ui->imgDisplayLabel->setPixmap(testImg.scaledToHeight(newHeight));
}
Увеличение размера работает хорошо. Но я столкнулся со следующей проблемой: когда я пытаюсь сделать окно меньше, оно не работает должным образом. Окно немного сжимается и изменение размера останавливается. При следующей попытке он немного сжимается и снова останавливается, и так далее:
И еще одна странная вещь: если вы не отпустите кнопку мыши, можно свободно изменить размер окна, пока оно не станет больше размера в начале. Кнопка «Развернуть окно» и возврат к предыдущему размеру также хорошо работает.
Как это исправить и сделать окно нормальным?