今天在写数据库的时候,遇到这样一个问题反反复复折磨了好半天
现在来总结一下这类问题的解决方法:
首先,出现这个问题的原因,我总结了两点(均是来自我遇到的情形,看看你是不是相同的情况)
原因一:也是最普遍的一种情形,
在QT程序中,定义了变量名(对象名),但是没有对其实例化操作。这种情况,程序是不会报错的,只有运行的时候才会报程序异常结束的错误。
友情提醒:仔细检查代码中的变量,很多都是由于这个原因导致的程序异常结束,所以在写代码的时候,尽量声明后,立即初始化,防止忘记
QSqlDatabase db; //声明了对象,但没有初始化
db.setDatabaseName("QSQLITE.db"); //直接在程序中使用这个未初始化的对象
db.open(); //直接在程序中使用这个未初始化的对象
/* 正确的方式 */
QSqlDatabase db; //声明对象
db=QSqlDatabase::addDatabase("QSQLITE"); //初始化对象
db.setDatabaseName("QSQLITE.db"); //然后使用该对象
db.open();
原因二:我的情形是,在关闭窗口界面时,直接将关闭窗口的函数放在程序前面,这样导致后序程序异常结束
解决方法:将窗口关闭函数尽量放在函数执行完成或则后序没有紧跟着的程序位置上,例如
while(query.next())
{
finduser=query.value(0).toString();
findpassword=query.value(1).toString();
if(!(QString::compare(finduser, ui->LinEdit_user->currentText(), Qt::CaseSensitive)) &&
!(QString::compare(findpassword, ui->lineEdit_passwd->text(), Qt::CaseSensitive)))
{
home->show();
home->setAttribute(Qt::WA_DeleteOnClose);
qDebug()<<"user:"<<finduser<<endl;
qDebug()<<"passwd:"<<findpassword<<endl;
this->close(); //放在程序运行结束,如果放在 home->show();前面,那么就会导致程序还没运行完,窗口就关闭了,报程序异常结束的错误
return;
}else
{
continue;
}
}
好了,以上就是个人总结的QT中程序异常退出的两种情形,当然,情况还要,也希望大家多多分享,一起少踩坑