QThread mit eigener Klasse Event Loop



  • Hallo Forum,

    stehe leider vor einem kleinem Problem und zwar beschäftige ich mich etwas mit QThread. Ich wollte das Ganze auf eine GUI anwenden bekomme es leider nicht hin :-(

    MainWindow.cpp:

    @#include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include <qthreadworker.h>
    #include <QThread>
    #include <QDebug>

    MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
    {
    ui->setupUi(this);
    ui->mainToolBar->hide();
    }

    MainWindow::~MainWindow()
    {
    delete ui;
    }

    void MainWindow::on_pushButton_clicked()
    {
    QThread *thread = new QThread();
    ThreadWorker *worker = new ThreadWorker();
    worker->moveToThread(thread);
    thread->start();
    }@

    qthreadworker.h:

    @#ifndef QTHREADWORKER_H
    #define QTHREADWORKER_H

    #include <QObject>

    class ThreadWorker : public QObject
    {

    Q_OBJECT

    public slots:
    void run();

    };

    #endif // QTHREADWORKER_H
    @

    qthreadworker.cpp:

    @#include "qthreadworker.h"

    #include <QDebug>
    #include <QThread>
    #include <mainwindow.h>

    // Hier wird die eigentliche Arbeit durchgeführt.
    void ThreadWorker::run()
    {
    qDebug()<<"Debug";
    thread()->quit();
    }
    @

    Der QThread soll bei Button nur ein "Debug" auf die Console ausspucken für Quasi ich wurde gestartet. Leider bekomme ich auf dem qDebug() keine Ausgabe und der Compiler ärgert sich auch nicht.
    Weis einer von euch wo mein Problem momentan ist?

    Gruß

    Alex



  • Habe jetzt mal das ganze vereinfacht

    MainWindow:

    @#include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include <qthreadworker.h>
    #include <QThread>
    #include <QtDebug>

    MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
    {
    ui->setupUi(this);
    ui->mainToolBar->hide();
    }

    MainWindow::~MainWindow()
    {
    delete ui;
    }

    void MainWindow::on_pushButton_clicked()
    {

    ThreadWorker worker;
    worker.start();
    worker.wait();
    

    }
    @

    qthreadworker.h:

    @#ifndef QTHREADWORKER_H
    #define QTHREADWORKER_H

    #include <QObject>
    #include <QThread>

    class ThreadWorker : public QThread
    {

    Q_OBJECT

    public slots:
    void run();

    };

    #endif // QTHREADWORKER_H
    @

    qthreadworker.cpp:

    @#include "qthreadworker.h"

    #include <QtDebug>
    #include <QThread>
    #include <mainwindow.h>

    // Hier wird die eigentliche Arbeit durchgeführt.
    void ThreadWorker::run()
    {
    int a = 0;

    for(a = 0; a <= 10000; a++)
        qDebug()<<a;
    

    }
    @

    Wie kann ich jetzt ein event loop daraus machen das er immer und immer wieder das abarbeitet?


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.