PDA

View Full Version : QT Android application suddenly crashes



Reiji
2nd June 2015, 13:22
Hi,
I'm developing an android app which calculates and dispalys the time of other time zones. Suddenly it begun to chrash everytime when I select the time zone via a Radio Button.
And it doesn't calculates with the time anymore.

The source code of the main windows(called weltzeit in my project):



#include "weltzeit.h"
#include "ui_weltzeit.h"
#include <QTime>
#include <QDebug>

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

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

int DST = 0;

QTime ct = QTime::currentTime();


void WeltZeit::on_DSTBox_clicked()
{
DST = 1;
}


void WeltZeit::on_BerlinButton_clicked()
{
ui->CTtimeEdit->setTime(ct);
ui->DEtimeEdit->setTime(ct);
QTime eng = ct.addSecs(-3600);
ui->ENtimeEdit->setTime(eng);
if (DST == 1)
{
QTime jp = ct.addSecs(25200);
ui->JPtimeEdit->setTime(jp);
}
else
{
QTime jp = ct.addSecs(28800);
ui->JPtimeEdit->setTime(jp);
}
QTime ny = ct.addSecs(-21600);
ui->NytimeEdit->setTime(ny);
}



void WeltZeit::on_LondonButton_clicked()
{
// QString ctTime = ct.toString("HH:mm:ss");
ui->CTtimeEdit->setTime(ct);
ui->ENtimeEdit->setTime(ct);
QTime de = ct.addSecs(3600);
ui->DEtimeEdit->setTime(de);
if (DST == 1)
{
QTime jp = ct.addSecs(28800);
ui->JPtimeEdit->setTime(jp);
}
else
{
QTime jp = ct.addSecs(32400);
ui->JPtimeEdit->setTime(jp);
}
QTime ny = ct.addSecs(-25200);
ui->NytimeEdit->setTime(ny);

}




void WeltZeit::on_uhrzeitBtn_clicked()
{
QTime ct = QTime::currentTime();
// QString ctTime = ct.toString("HH:mm:ss");
ui->CTtimeEdit->setTime(ct);
}



void WeltZeit::on_JapanButton_clicked()
{
ui->CTtimeEdit->setTime(ct);
ui->JPtimeEdit->setTime(ct);
if (DST ==1) {
QTime de = ct.addSecs(-28800);
ui->DEtimeEdit->setTime(de);
QTime en = ct.addSecs(-25200);
ui->ENtimeEdit->setTime(en);
QTime ny = ct.addSecs(-50400);
ui->NytimeEdit->setTime(ny);
}
else
{
QTime de = ct.addSecs(-25200);
ui->DEtimeEdit->setTime(de);
QTime en = ct.addSecs(-28800);
ui->ENtimeEdit->setTime(en);
QTime ny = ct.addSecs(-54000);
ui->NytimeEdit->setTime(ny);
}
}



void WeltZeit::on_NewYorkButton_clicked()
{
ui->CTtimeEdit->setTime(ct);
ui->NytimeEdit->setTime(ct);
QTime de = ct.addSecs(21600);
ui->DEtimeEdit->setTime(de);
QTime en = ct.addSecs(25200);
ui->ENtimeEdit->setTime(en);
if (DST == 1)
{
QTime jp = ct.addSecs(46800);
ui->JPtimeEdit->setTime(jp);
}
else
{
QTime jp = ct.addSecs(50400);
ui->JPtimeEdit->setTime(jp);
}
}


void WeltZeit::on_ENtimeEdit_timeChanged(const QTime &time)
{
QTime deTime = ui->ENtimeEdit->time().addSecs(3600); //adds an hour
ui->DEtimeEdit->setTime(deTime);
QTime nyTime = ui->ENtimeEdit->time().addSecs(-18000);
ui->NytimeEdit->setTime(nyTime);
if (DST == 1)
{
QTime jpTime = ui->ENtimeEdit->time().addSecs(28800);
ui->NytimeEdit->setTime(jpTime);
}
else
{
QTime jpTime = ui->ENtimeEdit->time().addSecs(32400);
ui->NytimeEdit->setTime(jpTime);
}

}


void WeltZeit::on_DEtimeEdit_timeChanged(const QTime &time)
{
QTime enTime = ui->DEtimeEdit->time().addSecs(-3600); //adds an hour
ui->ENtimeEdit->setTime(enTime);
QTime nyTime = ui->DEtimeEdit->time().addSecs(-21600);
ui->NytimeEdit->setTime(nyTime);
if (DST == 1)
{
QTime jpTime = ui->DEtimeEdit->time().addSecs(25200);
ui->JPtimeEdit->setTime(jpTime);
}
else
{
QTime jpTime = ui->DEtimeEdit->time().addSecs(28800);
ui->JPtimeEdit->setTime(jpTime);
}
}

void WeltZeit::on_JPtimeEdit_timeChanged(const QTime &time)
{
if (DST == 1)
{
QTime enTime = ui->JPtimeEdit->time().addSecs(-28800);
ui->ENtimeEdit->setTime(enTime);
QTime deTime = ui->JPtimeEdit->time().addSecs(-25200);
ui->DEtimeEdit->setTime(deTime);
QTime nyTime = ui->JPtimeEdit->time().addSecs(-46800);
ui->NytimeEdit->setTime(nyTime);
}
else
{
QTime enTime = ui->JPtimeEdit->time().addSecs(-32400);
ui->ENtimeEdit->setTime(enTime);
QTime deTime = ui->JPtimeEdit->time().addSecs(-28800);
ui->DEtimeEdit->setTime(deTime);
QTime nyTime = ui->JPtimeEdit->time().addSecs(-50400);
ui->NytimeEdit->setTime(nyTime);
}
}

void WeltZeit::on_NytimeEdit_timeChanged(const QTime &time)
{
QTime enTime = ui->NytimeEdit->time().addSecs(18000); //adds an hour
ui->ENtimeEdit->setTime(enTime);
QTime deTime = ui->NytimeEdit->time().addSecs(21600);
ui->DEtimeEdit->setTime(deTime);
if (DST == 1)
{
QTime jpTime = ui->NytimeEdit->time().addSecs(46800);
ui->JPtimeEdit->setTime(jpTime);
}
else
{
QTime jpTime = ui->NytimeEdit->time().addSecs(50400);
ui->JPtimeEdit->setTime(jpTime);
}
}


The form(when it worked):

11191


The form(before it crashes):
11192

At the end of output of the application(in qt creator) I get the message:

Fatal signal 11 (SIGSEGV) at 0xaab6beac (code=2), thread 1415 (xample.WeltZeit)

Reiji
3rd June 2015, 14:25
I found my problem.The problem was that I put a slot(changedTime) at any QTimeEdit element. I already change the time by selecting the time zone with the radio button.
So after I slected my time zone every time of every QTimeEdit elements are changed. And after that all the functions of every changedTime-Slot tries to change the time of each other QTimeEdit elemts until the application doesn't respond anymore. :rolleyes:

Now I have to find a slot which just responds if i clicked a key(for example: enter-key).