From 7766ac212045e1df2a7154947ff35257f367e768 Mon Sep 17 00:00:00 2001 From: Gokul Kartha Date: Wed, 17 Nov 2010 22:14:32 +0200 Subject: [PATCH] Added an ImageLoader Object to Support Multi Threading in Loading an Image The ImageLoader Object is associated with the workspace --- src/app/app.pro | 2 +- src/core/baseui/workspace.cpp | 27 +++++++++++++++++++++++++-- src/core/baseui/workspace.h | 21 ++++++++++++++++++--- 3 files changed, 44 insertions(+), 6 deletions(-) diff --git a/src/app/app.pro b/src/app/app.pro index 5321cec..3835bdd 100644 --- a/src/app/app.pro +++ b/src/app/app.pro @@ -1,2 +1,2 @@ TEMPLATE = subdirs -SUBDIRS = x11 +SUBDIRS = viewer x11 diff --git a/src/core/baseui/workspace.cpp b/src/core/baseui/workspace.cpp index 673555e..b77feef 100644 --- a/src/core/baseui/workspace.cpp +++ b/src/core/baseui/workspace.cpp @@ -1,14 +1,37 @@ #include "workspace.h" #include +ImageLoader::ImageLoader() +{ + url=QString(); +} +void ImageLoader::fetchImage(QString path) +{ + url=path; + start(); +} +void ImageLoader::run() +{ + QImage image(url); + emit ready(image); +} + Workspace::Workspace(QWidget *parent) : QWidget(parent) { - loadImage("/home/shakir/Desktop/Test/test1.jpg"); + qRegisterMetaType("QImage &" ); + mImageLoader=new ImageLoader(); + connect(mImageLoader,SIGNAL(ready(QImage&)),this,SLOT(onImageLoaded(QImage&))); } void Workspace::loadImage(QString fileName) { - mImage=QImage(fileName); + mImageLoader->fetchImage(fileName); } +void Workspace::onImageLoaded(QImage &image) +{ + mImage=image.copy(); + update(); +} + void Workspace::zoomIn() { mImage=mImage.scaledToHeight(mImage.height()*1.5); diff --git a/src/core/baseui/workspace.h b/src/core/baseui/workspace.h index 8835af4..a7f669b 100644 --- a/src/core/baseui/workspace.h +++ b/src/core/baseui/workspace.h @@ -2,6 +2,21 @@ #define WORKSPACE_H #include +#include + +class ImageLoader:public QThread +{ + Q_OBJECT +public: + ImageLoader(); + void fetchImage(QString path); +private: + void run(); +signals: + void ready(QImage&); +private: + QString url; +}; class Workspace : public QWidget { @@ -12,14 +27,14 @@ public: virtual void paintEvent(QPaintEvent *); signals: - public slots: void zoomIn(); void zoomOut(); - +private slots: + void onImageLoaded(QImage&); private: QImage mImage; - + ImageLoader *mImageLoader; }; #endif // WORKSPACE_H -- 1.7.9.5