QtConcurrent-run-member-function
[toc align_right="yes" depth="3"]
You can call a member function of an object using QtConcurrent::run as follows. (Note for an inherited member function, please see QtConcurrent-run-inherited-member-function).
form.h
#ifndef FORM_H<br />#define FORM_H
#include "ui_form.h&quot;
#include "MyClass.h&quot;
class Form : public QWidget, private Ui::Form<br />{<br />Q_OBJECT
public slots:
void on_pushButton_clicked();
public:<br /> Form(QWidget *parent = 0);
private:<br /> MyClass MyObject;
};
#endif
form.cpp
<br />#include <QtGui&gt;<br />#include <QImage&gt;
#include "form.h&quot;
#include <iostream&gt;
Form::Form(QWidget *parent)<br /> : QWidget(parent)<br />{<br /> setupUi(this);
}
void Form::on_pushButton_clicked()<br />{<br /> // Start the computation.<br /> QFuture&lt;void&gt; future = QtConcurrent::run(&this->MyObject, &MyClass::LongFunction);
}<br />
form.ui
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Form</class>
<widget class="QWidget" name="Form">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QPushButton" name="pushButton">
<property name="text">
<string>PushButton</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
MyClass.h
<br />#ifndef MyClass_H<br />#define MyClass_H
#include <iostream&gt;
class MyClass<br />{<br />public:
void LongFunction()<br /> {<br /> for( int count = 0; count < 5; count++ )<br /> {<br /> sleep( 1 );<br /> std::cout << "Ping long!" << std::endl;<br /> }<br /> }<br />};
#endif<br />
main.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&#40;);