Здесь ниже приведены мои коды на демонстрации подключения сигнального слота:
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
.Кто-нибудь может помочь отладить мои коды?Спасибо!