Application crashes when mouse moves
-
In the main module called typingmain, i do the following with the practiseform
typingmain.cpp
@
QPointer <practising> practiseform = new practising(true,1,0,0); // practise mode, default lesson min=1, lessonmax=0, new parent window=0
practiseform->mainparentform=this; connect(practiseform.data(),SIGNAL(ToTypingDeletePractise(int)),this,SLOT(CloseChild(int));
this->hide();
int x=practiseform->exec();
if (qDebugDemo>=2) {qDebug() << "returned back";}
this->show();
if (qDebugDemo>=1) {qDebug () << "practise finished with return =" << x << " is window reset?" << practiseform.isNull();}
if (! practiseform.isNull())
{
qDebug() << "delete practiseform";
//delete practiseform;
}
@In practising, i load the handpop when a button is clicked
practising.cpp
@
if (!handwindowenabled)
{
handpop = new practisehandwin(0);
//connect(this,SIGNAL(destroyed()),handpop.data(),SLOT(close()));
//QScopedPointer<practisehandwin> handpop(new practisehandwin(0));
}
@Then when it closes, i delete the handpop and emit a signal back to typingmain to delete the practising pointer
@
void practising::closeEvent(QCloseEvent *event)
{
if (qDebugDemo>=2)
{ qDebug()<< "practising::closeEvent";
qDebug() << "to delete handpop";
}
if (!handpop.isNull())
{
//emit(this->ToHandWindowDeleteYourSelf());
handpop.data()->close();
}
delete handpop;PractiseTimerFire->stop(); disconnect(PractiseTimerFire,0); if (qDebugDemo>=2) {qDebug()<<"to delete highlighter";} delete highlighter; if (qDebugDemo>=2) {qDebug() << "to delete keyboard map ";} delete kbmap; if (qDebugDemo>=2) {qDebug() << "to delete timer";} delete PractiseTimerFire; if (qDebugDemo>=2) {qDebug() << " delete scroll bar";} delete sb; if (qDebugDemo>=2) {qDebug() << " ------------";} this->done(1); emit(this->ToTypingDeletePractise(1)); if (qDebugDemo>=2) {qDebug() << "practise close me signal emitted";} //this->mainparentform->show(); //event->accept(); qDebug() << "closesevent - first part pass" << handpop.isNull(); //delete inst_speed; //delete inst_speed_correct; //delete inst_speed_correct_diff; //delete inst_speed_timepassd; //Practise_AddToDataBase(); // Add data to dB //Q_UNUSED(event); //unreferenced formal parameter //qDebug() << "closever 3"; quitpractise = true; //delete ui; //event->ignore();
}
@in typingmain
@
void TypingTutorMain::CloseChild(int childnumber)
{
switch (childnumber)
{
case 1:
if (! practiseform.isNull())
{
qDebug()<<"signal received delete practise follows";
practiseform.data()->deleteLater();
qDebug() << "is practise deleted?"<< practiseform.isNull();
}
}
}
@Note that if i use
//QScopedPointer<practising> practiseform(new practising(true,1,0,0));
it which is the same as QPointer but it deletes it self automatic, it crashes, even if i disable emiting the ToTypingDeletePractise signalI don't know if i close the handpop correctly
-
It looks like your are using dialogs and not just widget and you only use them locally. So just don't create pointers to QDialogs if the logic is:
Create dialog
Ask something to the user
Get result
Delete dialog
You really should first go through the examples in Qt's documentation. You are starting to write code that is going to be a nightmare to follow and maintain.