leider hab ich dieses Problem trotz langen Suchen und Try&Error nicht lösen können, hier erstmal ein paar Code-Snippets:
mainwindow.h
Code: Alles auswählen
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
Ui::MainWindow *ui;
public slots:
void writeConsole(QString input);
void setProgress(int progress);
}
class Worker : public QObject {
Q_OBJECT
public:
Worker();
~Worker();
public slots:
void process();
signals:
void finished();
QString output(QString input);
void setProgress(int progress);
void error(QString err);
};Code: Alles auswählen
void MainWindow::on_btn_execute_clicked()
{
ui->btn_execute->setEnabled(false);
ui->progressBar->setValue(0);
ui->consoleoutput->clear();
QThread* thread = new QThread;
Worker* worker = new Worker();
worker->moveToThread(thread);
connect(thread, SIGNAL(started()), worker, SLOT(process()));
connect(worker, SIGNAL(finished()), thread, SLOT(quit()));
connect(worker, SIGNAL(output(QString input)), this, SLOT(writeConsole(QString input)));
connect(worker, SIGNAL(setProgress(int progress)), this, SLOT(setProgress(int progress)));
connect(worker, SIGNAL(finished()), worker, SLOT(deleteLater()));
connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
thread->start();
}
void MainWindow::writeConsole(QString input)
{
ui->consoleoutput->appendPlainText(input);
}
void MainWindow::setProgress(int progress)
{
ui->progressBar->setValue(progress);
}
Worker::Worker() {
}
Worker::~Worker() {
}
void Worker::process() {
emit setProgress(100*(i+1)/taskmax); //Stand zur ProgressBar im Mainthread übergeben
currentTime = QTime::currentTime();
emit output(currentTime.toString("hh:mm:ss") + " Task number "+QString::number(i+1)+"\n"); //eine Konsolenausgabe tätigen
emit output("=== Tasks completed, ready for new work ===\n");
emit finished();
}Bin für jede Anregung dankbar!