本文是我的原创噢噢噢噢,转载请标明网址噢噢噢噢。
因为图片数量比较多而且图片比较大,所以我用QT的多线程以及信号与槽方法加载图片,加载图片的总体思路如下:
1、主线程调用QThread的子类的start函数
2、在run函数中每次加载一张图片,并且以emit image(const QImage&)的形式传递到主线程;
3、主线程响应这个信号,连接相应的槽函数setImage,并且在setImage函数里面调用QThread的子类的start,加载剩下的图片,满足一定条件后,不再调用start函数。
有人可能会感觉奇怪,我为什么要在QThread子类的run函数中每次只加载一张图片,那是因为这是我的个人需求,比如说我在文件目录下有8张图片,我先要加载5张图片,然后这5张图片加载完之后,我要通过一个按钮逐次逐次地加载剩下的图片,所以,我要在run函数里面每次加载一张图片。程序的主要文件有main.cpp,widget.h,widget.cpp,imageloadingthread.h和imageloadingthread.cpp。
类Widget是QWidget的子类,由widget.h和widget.cpp文件声明和定义,类ImageLoadingThread是QThread的子类,由imageloadingthread.h和imageloadingthread.cpp文件声明和定义。上面提过的start函数就是ImageLoadingThread::start函数,就是在Widget类里面被调用的。主要代码如下:
imageloadingthread.h文件
#ifndef IMAGELOADINGTHREAD_H
#define IMAGELOADINGTHREAD_H
#include <QThread>
#include <QStringList>
class ImageLoadingThread : public QThread
{
Q_OBJECT
public:
enum Direction{
Left,
Right
};
ImageLoadingThread(const QStringList &imagePathList);