1. 程式人生 > >Qt預覽圖片(同一目錄下),點選後單張顯示

Qt預覽圖片(同一目錄下),點選後單張顯示

介面展示

  • 主介面將對目標目錄下的影象檔案進行預覽

這裡寫圖片描述

  • 點選預覽影象將會單張最大化視窗顯示該圖片

這裡寫圖片描述

話不多說,直接上程式碼

// 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(); }