PDA

View Full Version : Signals & Slots problem



cupersuper
10th November 2015, 17:34
Hi,
I have some kind of loop using signals & slots. My application crashed when program do 3580 iterations on Qt4.8. I can't understand why crash. Please kindly help.


//main.cpp
int main(int argc, char *argv[])
{
...
MainWindow w;
Second s;
QObject::connect(&w,SIGNAL(go()),&s,SLOT(go()));
QObject::connect(&s,SIGNAL(back()),&w,SLOT(back()));
...
}


//mainwindow.h
class MainWindow : public QMainWindow
{
...
private:
int VALUE;
int MAX_VALUE;

private slots:
void on_pushButton_clicked();

public slots:
void back();

signals:
void go();
};


//mainwindow.cpp
void MainWindow::on_pushButton_clicked()
{
VALUE = 0;
MAX_VALUE = 10000;

emit go();
}

void MainWindow::back()
{
qDebug() << VALUE;

if(VALUE<MAX_VALUE)
{
VALUE++;
emit go();
}
}


//second.h
class Second : public QObject
{
...
signals:
void back();

public slots:
void go();
};


//second.cpp
void Second::go()
{
emit back();
}
11507

Thanks;

Lesiok
10th November 2015, 19:09
When the sender and receiver of signal are in this same thread emitting signal is this same like calling procedure. So You have stack overflow. Read more about QObject::connect and use last parameter to create queued connection.