QTimer в потоке - PullRequest
       46

QTimer в потоке

0 голосов
/ 07 октября 2018

Я просто хочу испустить 2 сигнала и тайм-аут Qtimer при нажатии кнопки из графического интерфейса.

Хотя РАБОТА 2 СИГНАЛА / СЛОТА СИГНАЛ / СЛОТ QTimer не работает, слот тайм-аута никогда не работает.Даже ошибки нет.

GUI (DIALOG.CPP)

#include "dialog.h"
#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    fduthread = new fdustatus(this);
    connect(fduthread,SIGNAL(NumberChanged(int)),this,SLOT(onNumberChanged(int)));
    connect(fduthread,SIGNAL(nameChange(QString)),this,SLOT(onNameChanged(QString)));
}

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

void Dialog::onNumberChanged(int number)
{
    ui->label->setText(QString::number(number));
}

void Dialog::onNameChanged(QString s)
{

    ui->label_2->setText(s);

}

void Dialog::on_pushButton_clicked()
{
    fduthread->start();
    fduthread->stop=false;
}

void Dialog::on_pushButton_2_clicked()
{
    ui->label_2->setText("");
    fduthread->stop=true;
}

ЭТО МОЯ РЕЗЬБА

#include "fdustatus.h"
#include<QMutex>
#include<QTimer>
#include<QDebug>

fdustatus::fdustatus(QObject *parent):QThread(parent)
{

}
void fdustatus::run()
{
   mytimer = new QTimer();
   mytimer->setInterval(10);
    connect( mytimer,SIGNAL(timeout()),this,SLOT(whentimeout()));
     mytimer->start();
    for(int i =0;i<100;i++)
    {
        QMutex mutex;
        mutex.lock();
        if(this->stop)break;
        mutex.unlock();

        emit NumberChanged(i*10);

        emit nameChange(getstring());
        this->msleep(100);
   }

}
QString fdustatus::getstring()
{

    QString networkport;
    networkport.append("Alarm Active");
    return networkport;
}
void fdustatus::whentimeout()
{
    qDebug() << "timer ended from thread..";

}
...