Added an ImageLoader Object to Support Multi Threading in Loading an Image
authorGokul Kartha <everyourgokul@gmail.com>
Wed, 17 Nov 2010 20:14:32 +0000 (22:14 +0200)
committerGokul Kartha <everyourgokul@gmail.com>
Wed, 17 Nov 2010 20:14:32 +0000 (22:14 +0200)
The ImageLoader Object is associated with the workspace

src/app/app.pro
src/core/baseui/workspace.cpp
src/core/baseui/workspace.h

index 5321cec..3835bdd 100644 (file)
@@ -1,2 +1,2 @@
 TEMPLATE = subdirs
 TEMPLATE = subdirs
-SUBDIRS =  x11
+SUBDIRS =  viewer x11
index 673555e..b77feef 100644 (file)
@@ -1,14 +1,37 @@
 #include "workspace.h"
 #include <QPainter>
 #include "workspace.h"
 #include <QPainter>
+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)
 {
 Workspace::Workspace(QWidget *parent) :
     QWidget(parent)
 {
-    loadImage("/home/shakir/Desktop/Test/test1.jpg");
+    qRegisterMetaType<QImage>("QImage &" );
+    mImageLoader=new ImageLoader();
+    connect(mImageLoader,SIGNAL(ready(QImage&)),this,SLOT(onImageLoaded(QImage&)));
 }
 void  Workspace::loadImage(QString fileName)
 {
 }
 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);
 void  Workspace::zoomIn()
 {
     mImage=mImage.scaledToHeight(mImage.height()*1.5);
index 8835af4..a7f669b 100644 (file)
@@ -2,6 +2,21 @@
 #define WORKSPACE_H
 
 #include <QWidget>
 #define WORKSPACE_H
 
 #include <QWidget>
+#include <QThread>
+
+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
 {
 
 class Workspace : public QWidget
 {
@@ -12,14 +27,14 @@ public:
     virtual void paintEvent(QPaintEvent *);
 signals:
 
     virtual void paintEvent(QPaintEvent *);
 signals:
 
-
 public slots:
     void zoomIn();
     void zoomOut();
 public slots:
     void zoomIn();
     void zoomOut();
-
+private slots:
+    void onImageLoaded(QImage&);
 private:
     QImage mImage;
 private:
     QImage mImage;
-
+    ImageLoader *mImageLoader;
 };
 
 #endif // WORKSPACE_H
 };
 
 #endif // WORKSPACE_H