• 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

  • 相关阅读:
    1619: 【例 1】Prime Distance
    Apache的架构师们遵循的30条设计原则(转帖)
    DP秒思维
    dsu on tree入门
    莫队入门
    行列式与霍尔基夫矩阵
    高精度板子
    splay入门
    回文自动机入门
    AC自动机
  • 原文地址:https://www.cnblogs.com/fuqia/p/9003954.html
Copyright © 2020-2023  润新知