Qt預覽圖片(同一目錄下),點選後單張顯示
阿新 • • 發佈:2019-01-06
介面展示
- 主介面將對目標目錄下的影象檔案進行預覽
- 點選預覽影象將會單張最大化視窗顯示該圖片
話不多說,直接上程式碼
// imagewidget.h
#ifndef IMAGEWIDGET_H
#define IMAGEWIDGET_H
#include <QtWidgets/QWidget>
#include <QLabel>
class QStringList;
class QListWidget;
class QListWidgetItem;
class ImageWidget : public QWidget
{
Q_OBJECT
public :
ImageWidget(QWidget *parent = 0);
~ImageWidget();
private:
void init(); // 初始化
private slots:
void slot_itemClicked(QListWidgetItem*);
private:
QStringList m_imgList; // 檔案目錄下所有的影象檔名
QListWidget *m_listWidget; // 預覽視窗
QString m_strPath; // 資料夾路徑
QLabel m_showWidget; // 影象顯示視窗
};
#endif // IMAGEWIDGET_H
// imagewidget.cpp
#include "imagewidget.h"
#include <QDir>
#include <QStringList>
#include <QListWidget>
#include <QVBoxLayout>
#include <QListWidgetItem>
ImageWidget::ImageWidget(QWidget *parent)
: QWidget(parent){
this->init();
}
ImageWidget::~ImageWidget(){}
void ImageWidget::init() {
// 視窗基本設定
this->setWindowTitle("Image Preview");
this->setMinimumSize(780, 600);
m_showWidget.setWindowTitle("Image Show");
m_showWidget.setAlignment(Qt::AlignCenter);
const QSize IMAGE_SIZE(240, 160);
const QSize ITEM_SIZE(240, 190);
// 判斷路徑是否存在
m_strPath = "E:\\img";
QDir dir(m_strPath);
if (!dir.exists()) {
return;
}
// 設定過濾器
dir.setFilter(QDir::Files | QDir::NoSymLinks);
QStringList filters;
filters << "*.png" << "*.jpg";
dir.setNameFilters(filters);
m_imgList = dir.entryList();
if (m_imgList.count() <= 0) {
return;
}
// QListWidget基本設定
m_listWidget = new QListWidget(this);
m_listWidget->setIconSize(IMAGE_SIZE);
m_listWidget->setResizeMode(QListView::Adjust);
m_listWidget->setViewMode(QListView::IconMode);
m_listWidget->setMovement(QListView::Static);
m_listWidget->setSpacing(8);
// 建立單元項
for (int i = 0; i<m_imgList.count(); ++i) {
QPixmap pixmap(m_strPath + "\\" + m_imgList.at(i));
QListWidgetItem *listWidgetItem = new QListWidgetItem(QIcon(pixmap.scaled(IMAGE_SIZE)), m_imgList.at(i));
listWidgetItem->setSizeHint(ITEM_SIZE);
m_listWidget->insertItem(i, listWidgetItem);
}
// 窗口布局
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(m_listWidget);
mainLayout->setMargin(0);
this->setLayout(mainLayout);
// 訊號與槽
connect(m_listWidget, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(slot_itemClicked(QListWidgetItem*)));
}
// 最大化視窗顯示影象
void ImageWidget::slot_itemClicked(QListWidgetItem * item) {
m_showWidget.setPixmap(QPixmap(m_strPath + "\\" + m_imgList.at(m_listWidget->row(item))));
m_showWidget.showMaximized();
}