1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
#include "previewfiledialog.h"
#include <QGridLayout>
PreviewFileDialog::PreviewFileDialog(QWidget* parent, const QString & caption, const QString & directory,
const QString & filter, int previewWidth) :
QFileDialog(parent, caption, directory, filter) {
QGridLayout *layout = (QGridLayout*) this->layout();
if (!layout) {
// this QFileDialog is a native one (Windows/KDE/...) and doesn't need to be extended with preview
return;
}
setObjectName("PreviewFileDialog");
QVBoxLayout* box = new QVBoxLayout();
mpPreview = new QLabel(tr("Preview"), this);
mpPreview->setAlignment(Qt::AlignCenter);
mpPreview->setObjectName("labelPreview");
mpPreview->setMinimumWidth(previewWidth);
mpPreview->setMinimumHeight(height());
setMinimumWidth(width() + previewWidth);
box->addWidget(mpPreview);
box->addStretch();
// add to QFileDialog layout
layout->addLayout(box, 1, 3, 3, 1);
connect(this, SIGNAL(currentChanged(const QString&)), this, SLOT(onCurrentChanged(const QString&)));
}
void PreviewFileDialog::onCurrentChanged(const QString & path) {
QPixmap pixmap = QPixmap(path);
if (pixmap.isNull()) {
mpPreview->setText(tr("Not an image"));
} else {
mpPreview->setPixmap(
pixmap.scaled(mpPreview->width(), height(), Qt::KeepAspectRatio, Qt::SmoothTransformation));
}
}
|