Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef MAINWINDOW_H
- #define MAINWINDOW_H
- #include <QMainWindow>
- #include <QThread>
- class Worker : public QObject {
- Q_OBJECT
- int i = 0;
- public:
- Worker() : QObject() { }
- signals:
- void finished(int i);
- public slots:
- void process();
- };
- class Controller : public QObject {
- Q_OBJECT
- Worker *w;
- QThread *thr;
- public:
- Controller(QObject *parent = nullptr) : QObject(parent) { }
- private slots:
- void middleFinish(int i);
- public slots:
- void start();
- signals:
- void finished(int i);
- };
- namespace Ui {
- class MainWindow;
- }
- class MainWindow : public QMainWindow
- {
- Q_OBJECT
- public:
- explicit MainWindow(QWidget *parent = nullptr);
- ~MainWindow();
- private:
- Ui::MainWindow *ui;
- Controller _c;
- };
- #endif // MAINWINDOW_H
- #include "mainwindow.h"
- #include "ui_mainwindow.h"
- #include <QDebug>
- void Worker::process() { finished(++i); }
- void Controller::start() {
- thr = new QThread;
- w = new Worker;
- w->moveToThread(thr);
- connect(thr, &QThread::started, w, &Worker::process);
- connect(w, &Worker::finished, this, &Controller::middleFinish);
- thr->start();
- }
- void Controller::middleFinish(int i) {
- qDebug() << "middleFinish" << i;
- disconnect(w, &Worker::finished, this, &Controller::middleFinish);
- connect(w, &Worker::finished, this, &Controller::finished);
- connect(w, &Worker::finished, thr, &QThread::quit);
- connect(w, &Worker::finished, w, &Worker::deleteLater);
- connect(thr, &QThread::finished, thr, &QThread::deleteLater);
- thr->start();
- }
- MainWindow::MainWindow(QWidget *parent)
- : QMainWindow(parent), ui(new Ui::MainWindow) {
- ui->setupUi(this);
- connect(&_c, &Controller::finished, this, [] (int i) { qDebug() << "finish" << i; });
- _c.start();
- }
- MainWindow::~MainWindow() { delete ui; }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement