QtConcurrent-run-free-function

From Qt Wiki
Revision as of 02:18, 18 May 2017 by Henrik Jensen (talk | contribs) (→‎form.ui: code lang=xml)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

To call a free function using QtConcurrent::run, simply pass the function name.

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 <iostream>

Form::Form(QWidget *parent)
 : QWidget(parent)
{
 setupUi(this);
}

void LongFunction()
{
 for( int count = 0; count < 5; count++ )
 {
 sleep( 1 );
 std::cout << "Ping long!" << std::endl;
 }
}

void Form::on_btnOpen_clicked()
{
 QFuture<void> result = QtConcurrent::run ( LongFunction );
 //result.waitForFinished();

std::cout << "exit." << std::endl;
}

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>

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();
}