Difference between revisions of "Qt/Widgets/Thread"

From ProgrammingExamples
< Qt
Jump to: navigation, search
(Undo revision 3655 by 200.251.58.190 (Talk))
 
(5 intermediate revisions by 4 users not shown)
Line 1: Line 1:
==Thread.cxx==
+
==form.h==
 
<source lang="cpp">
 
<source lang="cpp">
#include <QThread>
+
#ifndef FORM_H
 +
#define FORM_H
  
class MyThread : public QThread
+
#include "ui_form.h"
 +
 
 +
class Form : public QWidget, private Ui::Form
 
{
 
{
 +
Q_OBJECT
 +
 +
public slots:
 +
 +
  void on_btnOpen_clicked();
  
 
public:
 
public:
 +
    Form(QWidget *parent = 0);
  
    virtual void run();
 
 
};
 
};
  
void MyThread::run()
+
#endif
 +
 
 +
</source>
 +
 
 +
==form.cpp==
 +
<source lang="cpp">
 +
#include <QtGui>
 +
#include <QImage>
 +
 
 +
#include "form.h"
 +
#include "MyClass.h"
 +
 
 +
#include <iostream>
 +
 
 +
Form::Form(QWidget *parent)
 +
    : QWidget(parent)
 
{
 
{
   for( int count = 0; count < 20; count++ )
+
   setupUi(this);
  {
+
    sleep( 1 );
+
    qDebug( "Ping!" );
+
  }
+
 
}
 
}
  
int main()
+
void Form::on_btnOpen_clicked()
 
{
 
{
   MyThread a;
+
   QThread* thread = new QThread;
   MyThread b;
+
 
   a.start();
+
   MyClass* myClass = new MyClass;
   b.start();
+
   myClass->moveToThread(thread);
   a.wait();
+
   connect(thread, SIGNAL(started()), myClass, SLOT(start()));
   b.wait();
+
   connect(myClass, SIGNAL(finished()), thread, SLOT(quit()));
 +
   thread->start();
 +
  //a->wait();
 
    
 
    
   return 0;
+
  std::cout << "exit." << std::endl;
 +
}
 +
 
 +
</source>
 +
 
 +
==Thread.cxx==
 +
<source lang="cpp">
 +
#include <QApplication>
 +
#include <QObject>
 +
#include <QThread>
 +
 
 +
#include <iostream>
 +
 
 +
#include "form.h"
 +
 
 +
int main(int argc, char*argv[])
 +
{
 +
  QApplication app(argc, argv);
 +
 
 +
  Form form;
 +
 
 +
  form.show();
 +
 
 +
   return app.exec();
 
}
 
}
 
</source>
 
</source>

Latest revision as of 11:13, 16 December 2011

form.h

#ifndef FORM_H
#define FORM_H
 
#include "ui_form.h"
 
class Form : public QWidget, private Ui::Form
{
Q_OBJECT
 
public slots:
 
  void on_btnOpen_clicked();
 
public:
    Form(QWidget *parent = 0);
 
};
 
#endif

form.cpp

#include <QtGui>
#include <QImage>
 
#include "form.h"
#include "MyClass.h"
 
#include <iostream>
 
Form::Form(QWidget *parent)
    : QWidget(parent)
{
  setupUi(this);
}
 
void Form::on_btnOpen_clicked()
{
  QThread* thread = new QThread;
 
  MyClass* myClass = new MyClass;
  myClass->moveToThread(thread);
  connect(thread, SIGNAL(started()), myClass, SLOT(start()));
  connect(myClass, SIGNAL(finished()), thread, SLOT(quit()));
  thread->start();
  //a->wait();
 
  std::cout << "exit." << std::endl;
}

Thread.cxx

#include <QApplication>
#include <QObject>
#include <QThread>
 
#include <iostream>
 
#include "form.h"
 
int main(int argc, char*argv[])
{
  QApplication app(argc, argv);
 
  Form form;
 
  form.show();
 
  return app.exec();
}

CMakeLists.txt

cmake_minimum_required(VERSION 2.6)
 
PROJECT(Thread)
 
FIND_PACKAGE(Qt4 REQUIRED)
INCLUDE(${QT_USE_FILE})
 
include_directories(${include_directories} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})
 
ADD_EXECUTABLE(Thread Thread.cpp)# ${MOCSrcs} ${UISrcs})
TARGET_LINK_LIBRARIES(Thread ${QT_LIBRARIES})