Witam serdecznie! Po pierwsze jestem tutaj nowy, tak że chciałem się gorąco przywitać:). A po drugie, przechodząc do konkretów to mam problem z uruchomieniem wątków w QT v.4.4.1 pod Win10. Próbuję uruchomić do testów prosty wątek ale nie działa; poniżej przedstawiam kod źródłowy.
Plik mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "worker.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
worker *mWorker = new worker;
mWorker->moveToThread(&mThread);
mThread.start();
connect(ui->pushMetoda1,SIGNAL(clicked()),mWorker,SLOT(metoda1(bool)));
connect(ui->pushMetoda2,SIGNAL(clicked()),mWorker,SLOT(metoda2(bool)));
connect(&mThread,SIGNAL(finished()),mWorker,SLOT(deleteLater()));
connect(mWorker,SIGNAL(rezultat(QStrin)),this,SLOT(thisRezultat(QSting)));
}
MainWindow::~MainWindow()
{
mThread.quit();
mThread.wait();
delete ui;
}
void MainWindow::thisRezultat(QString r)
{
ui->lineEdit->setText(r);
}
void MainWindow::on_pushButton_clicked()
{
ui->lineEdit->setText(QString::number((long long)QThread::currentThreadId()));
}
Plik worker.cpp
#include "worker.h"
worker::worker(QObject *parent) : QObject(parent)
{
}
void worker::metoda1(bool)
{
emit rezultat("jestem metoda 1");
QThread::sleep(1);
emit rezultat("ID mojego wątku to:");
QThread::sleep(1);
emit rezultat(QString::number((long long)QThread::currentThreadId()));
}
void worker::metoda2(bool)
{
emit rezultat("jestem metoda 2");
QThread::sleep(1);
emit rezultat("ID mojego wątku to:");
QThread::sleep(1);
emit rezultat(QString::number((long long)QThread::currentThreadId()));
}
Pliki mainwindow.h i worker.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QThread>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
QThread mThread;
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
private slots:
void thisRezultat(QString r);
void on_pushButton_clicked();
};
#endif // MAINWINDOW_H
#ifndef WORKER_H
#define WORKER_H
#include <QObject>
#include <QThread>
class worker : public QObject
{
Q_OBJECT
public:
explicit worker(QObject *parent = nullptr);
signals:
void rezultat(QString r);
public slots:
void metoda1(bool);
void metoda2(bool);
};
#endif // WORKER_H
Wygląda na to, że nie uruchamia się w ogóle wątek lub nie działa połączenie connect po naciśnięcia przycisku pushMetoda1.
Z góry dziękuję za pomoc.