Qt QListWidget實現圖片縮略圖列表


轉載:v_xchen_v

目標:

將本機中的多張圖片以縮略圖的形式顯示在列表中

環境:

我們已經做好了菜單欄和文件選擇對話框。參考:http://blog.csdn.net/v_xchen_v/article/details/71524160

實現:

以縮略圖列表展示圖片的功能寫在mymenu類的成員函數showImageList()中。使用Qt自帶的QListWidget類實現這個功能

步驟:

  • 1.定義一個QListWidget對象
  • 2. 設置ViewMode等屬性
  • 3.定義單元項並添加到QListWidget中
  • 4.調用QListWidget對象的show()方法

代碼如下:

mymenu.h

 1 #ifndef MYMENU_H
 2 #define MYMENU_H
 3 
 4 #include "QMainWindow"
 5 class mymenu : public QMainWindow
 6 {
 7     Q_OBJECT  // must include this if you use Qt signals/slots
 8 public:
 9     //構造函數
10     explicit mymenu(QWidget *parent = 0);//QWidget *parent = 0 表示mymenu控件不是任何控件的子控件
11 
12 private slots:
13     void fileOpenActionSlot();//打開文件動作對應的槽函數
14 private:
15     void createAction();     //創建動作
16     void createMenu();       //創建菜單
17     void createContentMenu();//創建上下文菜單
18 private:
19     void selectFile();       //彈出選擇文件對話框
20     void showImageList();    //用縮略圖顯示圖片
21 private:
22     QAction *fileOpenAction; //創建一個QAction指針,打開文件動作
23     QMenu *menu;             //創建一個QMenu指針
24 private:
25     QStringList fileNames;
26 };
27 
28 #endif // MYMENU_H

 

mymenu.cpp

  1 #include "mymenu.h"
  2 #include "QMenu"
  3 #include "QMenuBar"
  4 #include "QAction"
  5 #include "QMessageBox"
  6 #include "QFileDialog"
  7 #include "QDebug"
  8 #include "QListWidget"
  9 /****************************************
 10 * Qt中創建菜單和工具欄需要如下步驟:
 11 * 1. 建立行為Aciton
 12 * 2. 創建菜單並使它與一個行為關聯
 13 * 3. 創建工具條並使它與一個行為關聯
 14 *****************************************/
 15 mymenu::mymenu(QWidget *parent):QMainWindow(parent)
 16 {
 17    createAction();
 18    createMenu();
 19    createContentMenu();
 20    this->resize(300,400);
 21 }
 22 void mymenu::createAction()
 23 {
 24     //創建打開文件動作
 25     fileOpenAction = new QAction(tr("打開文件"),this);
 26     //攝者打開文件的快捷方式
 27     fileOpenAction->setShortcut(tr("Ctrl+O"));
 28     //設置打開文件動作提示信息
 29     fileOpenAction->setStatusTip("打開一個文件");
 30     //關聯打開文件動作的信號和槽
 31     connect(fileOpenAction,SIGNAL(triggered()),this,SLOT(fileOpenActionSlot()));
 32 }
 33 void mymenu::createMenu()
 34 {
 35     menu = this->menuBar()->addMenu(tr("文件"));
 36     menu->addAction(fileOpenAction);
 37 }
 38 
 39 void mymenu::createContentMenu()
 40 {
 41     this->addAction(fileOpenAction);
 42     this->setContextMenuPolicy(Qt::ActionsContextMenu);
 43 }
 44 
 45 void mymenu::fileOpenActionSlot()
 46 {
 47     //QMessageBox::warning(this,tr("提示"),tr("打開文件"),QMessageBox::Yes|QMessageBox::No);
 48     selectFile();
 49 }
 50 /****************************************
 51 * Qt中使用文件選擇對話框步驟如下:
 52 * 1. 定義一個QFileDialog對象
 53 * 2. 設置路徑、過濾器等屬性
 54 *****************************************/
 55 void mymenu::selectFile()
 56 {
 57     //定義文件對話框類
 58     QFileDialog *fileDialog = new QFileDialog(this);
 59     //定義文件對話框標題
 60     fileDialog->setWindowTitle(tr("打開圖片"));
 61     //設置默認文件路徑
 62     fileDialog->setDirectory(".");
 63     //設置文件過濾器
 64     fileDialog->setNameFilter(tr("Images(*.png *.jpg *.jpeg *.bmp)"));
 65     //設置可以選擇多個文件,默認為只能選擇一個文件QFileDialog::ExistingFiles
 66     fileDialog->setFileMode(QFileDialog::ExistingFiles);
 67     //設置視圖模式
 68     fileDialog->setViewMode(QFileDialog::Detail);
 69     //打印所有選擇的文件的路徑
 70     if(fileDialog->exec())
 71     {
 72         fileNames = fileDialog->selectedFiles();
 73         showImageList();
 74     }
 75     for(auto tmp:fileNames)
 76         qDebug()<<tmp<<endl;
 77 }
 78 /****************************************
 79 * Qt中使用文件選擇對話框步驟如下:
 80 * 1. 定義一個QListWidget對象
 81 * 2. 設置ViewMode等屬性
 82 * 3. 定義單元項並添加到QListWidget中
 83 * 4. 調用QListWidget對象的show()方法
 84 *****************************************/
 85 void mymenu::showImageList()
 86 {
 87     //定義QListWidget對象
 88     QListWidget *imageList = new QListWidget;
 89     imageList->resize(365,400);
 90     //設置QListWidget的顯示模式
 91     imageList->setViewMode(QListView::IconMode);
 92     //設置QListWidget中單元項的圖片大小
 93     imageList->setIconSize(QSize(100,100));
 94     //設置QListWidget中單元項的間距
 95     imageList->setSpacing(10);
 96     //設置自動適應布局調整(Adjust適應,Fixed不適應),默認不適應
 97     imageList->setResizeMode(QListWidget::Adjust);
 98     //設置不能移動
 99     imageList->setMovement(QListWidget::Static);
100     for(auto tmp : fileNames)
101     {
102         //定義QListWidgetItem對象
103         QListWidgetItem *imageItem = new QListWidgetItem;
104         //為單元項設置屬性
105         imageItem->setIcon(QIcon(tmp));
106         //imageItem->setText(tr("Browse"));
107         //重新設置單元項圖片的寬度和高度
108         imageItem->setSizeHint(QSize(100,120));
109         //將單元項添加到QListWidget中
110         imageList->addItem(imageItem);
111     }
112     //顯示QListWidget
113     imageList->show();
114 }

 

main.cpp

 1 #include "mymenu.h"
 2 #include <QApplication>
 3 #include <QProcess>
 4 #include <QMessageBox>
 5 int main(int argc, char *argv[])
 6 {
 7     QApplication a(argc, argv);
 8     mymenu m_menu;
 9     m_menu.show();
10     return a.exec();
11 }

 

效果:

工程下載地址:http://download.csdn.net/detail/v_xchen_v/9838782


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM