Сигнал-слот подключения.Процесс был окончательно завершен - PullRequest
0 голосов
/ 26 февраля 2019

Здесь ниже приведены мои коды на демонстрации подключения сигнального слота:

Mainwindow.cpp (он получает данные сигнала из Sender.cpp, показанного ниже)

#include "mainwindow.h"
#include "ui_mainwindow.h"

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

    status = false; //bool status
    check = 0; //int check

    sender = new Sender(); //Sender *sender
}

MainWindow::~MainWindow()
{
    delete ui;
    if(sender!=NULL)
    {
        delete sender;
    }
}

void MainWindow::on_pushButton_clicked() //a pushbutton is created in mainwindow.ui
{
    if(sender==NULL)
    {
        sender = new Sender();
    }

    if(status==false)
    {
        qDebug()<<"Button pressed.";
        connectionStarter(); //Signal-slot connection is triggered here!
    }
}

void MainWindow::connectionStarter()
{
    connect(sender,SIGNAL(sendData(int)),this,SLOT(workSlot(int)),Qt::QueuedConnection);
}

void MainWindow::workSlot(int data)
{
    this->data = data;
    check++;

    if(check!=60)
    {
        qDebug()<<"connected. check="<<check;
        qDebug()<<"received data="<<this->data;
    }
    else
    {
        check=0;
        status = true;
        disconnect(sender,SIGNAL(sendData(int)),this,SLOT(workSlot(int)));
        qDebug()<<"Disconnected.";
    }
}

Sender.cpp (длягенерация сигнала, управляемая объектом QTimer)

#include "sender.h"

Sender::Sender(QObject *parent) : QObject(parent)
{
    data = 0; //data to be updated and transmitted
    timer = new QTimer(this); //QTimer *timer
    timer->setInterval(1000);
    timer->start();

    qDebug()<<"Timer started.";
    connect(timer,SIGNAL(timeout()),this,SLOT(timerHandler()),Qt::DirectConnection);
}

void Sender::timerHandler()
{
    data++; //int data
    emit sendData(data);
    qDebug()<<"Data emited.";
}

Когда я запускаю программу, it has unexpectedly finished. The process was ended forcefully.Кто-нибудь может помочь отладить мои коды?Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...