为什么我的Qt应用程序没有理由崩溃
Why is my Qt Application crashing without reason?
我正在编写一个中等大小的应用程序,用于基于sqlite数据库存储数据。我已经创建了一个对话框添加数据到数据库。在保存数据之前,它将检查一些条件,以确保输入的数据是有效的。这是一个简单的过程。而且容易发现毛病。我确信在任何情况下使应用程序崩溃都不是错误的。此外,应用程序编译时不会出现错误。有时它工作得很好,但大多数情况下它会崩溃并关闭。
-
我的第一个问题是为什么会发生这种事情。(有时它工作得很好,有时它在相同的条件下崩溃)。
-
在这种情况下如何发现故障。简单地说,我所做的是,我习惯改变逻辑和改变代码,认为它会改变二进制和纠正错误。
交货:
if(query.exec()){ //codes here. }
我将用
替换这段代码bool ok=query.exec(); if(ok){ //code here.... }
newMember.h
和newMember.cpp
。(这是我的new member
对话的类)。如果需要更多的数据,请告诉我,我也会添加它们。
错误报告中,错误签名中提到ModName:qtgui4.dll , Offset: 000c14e6
newMember.h
#ifndef NEWMEMBER_H
#define NEWMEMBER_H
#include "ui_newmember.h"
class newMember : public QDialog, private Ui::newMember
{
Q_OBJECT
private:
QString path_1;
QPixmap pic;
public:
newMember(QString str, QWidget *parent );
public slots:
void browse();
void save_2();
};
#endif // NEWMEMBER_H
newMember.cpp
#include "newmember.h"
#include<QtGui>
#include<QtSql/QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
newMember::newMember(QString str, QWidget *parent)
{
setupUi(this);
lineEdit_7->setText(str);
radioButton->setChecked(true); ;
connect(pushButton,SIGNAL(clicked()),this,SLOT(browse()));
connect(pushButton_2,SIGNAL(clicked()),this,SLOT(save_2()));
}
void newMember::browse(){
path_1=QFileDialog::getOpenFileName(this,"choose an image for the new house", QString::null,"Image Files (*.jpg *.bmp)");
pic.load(path_1);
pic=pic.scaled(284,213,Qt::KeepAspectRatio, Qt::SmoothTransformation);
label_14->setPixmap(pic);
}
QString input1(QString str){
if(str=="")
return "-NA-";
else
return str;
}
void newMember::save_2(){
QByteArray array;
QBuffer buf(&array);
buf.open( QIODevice::WriteOnly);
pic.save(&buf,"jpg");
QString mof;
if(radioButton->isChecked())mof="male";
if(radioButton_2->isChecked())mof="female";
QString isgm="false";
if(checkBox->isChecked())isgm="true";
QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("data");
db.open();
QSqlQuery query;
query.exec("create table members(aname text, homeno text, namein text, fname text, onames text, nic text, sex text, bday text,gm text,occupation text,contactno text,qulification text,note text, img BLOB) ");
if(lineEdit_8->text()==""){
QMessageBox::about(this,"error","you should enter a name to identify this member n within the specific house");
return;
}
query.prepare("select aname from members where homeno=? and aname=? ");
query.bindValue(0,lineEdit_7->text());
query.bindValue(1,lineEdit_8->text());
query.exec();
if(query.next()){
QMessageBox::about(this, "error", "the name you entered to identify this member n is already available, please enter another one") ;
return;
}
if(isgm=="true"){
query.prepare("select aname from members where homeno=? and gm=?");
query.bindValue(0,lineEdit_7->text());
query.bindValue(1,"true");
query.exec();
if(query.next()){
QMessageBox::about(this, "error", "there is a gruha mulikaya set already");
return;
}
}
query.prepare("insert into members(aname, homeno , namein , fname , onames , nic , sex , bday ,gm ,occupation ,contactno ,qulification ,note ,img) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?) ");
query.bindValue(0,lineEdit_8->text());
query.bindValue(1,input1(lineEdit_7->text()));
query.bindValue(2,input1(lineEdit->text()));
query.bindValue(3,input1(lineEdit_2->text()));
query.bindValue(4,input1(lineEdit_3->text()));
query.bindValue(5,input1(lineEdit_4->text()));
query.bindValue(6,mof);
query.bindValue(7,dateEdit->date().toString("yyyy-MM-dd") );
query.bindValue(8,isgm);
query.bindValue(9,input1(lineEdit_5->text()));
query.bindValue(10,input1(lineEdit_6->text()));
query.bindValue(11,input1(textEdit->toPlainText()));
query.bindValue(12,input1(textEdit_2->toPlainText()));
query.bindValue(13,array);
bool ok=query.exec();
if(!ok){
QSqlError error;
error=query.lastError();
QMessageBox::about(this,"error",error.text() );
}
else{
QMessageBox::about(this,"message","data added successfully");
newMember::close();
}
}
- 尝试在调试器下运行应用程序。它会显示你的应用程序在代码中的哪个地方崩溃了。在你的情况下,它可能是段故障。 为什么不检查返回值呢?
相关文章:
- 为什么从文件获取图标时应用程序有时会崩溃?
- 是否有理由在标题中保留完全专用的模板?
- 如果我有很多具有相似前缀的字符串,是否有理由从该前缀创建一个子字符串?
- 在Win7上,在默认端点上轮询音频会话有时会崩溃
- 如果代码中没有连接任何插槽,是否有理由发出Qt信号?
- 是否有理由对非负常量使用无符号类型?
- 是否有理由大多数/所有 try-catch 示例只对 throw 语句使用 void 子函数
- 是否仍然有理由在C++代码中使用"int"
- 是否有理由使用 malloc 初始化构造函数中的指针
- 具有C DLL的Excel-VBA有时会崩溃
- 是否有理由跳过for循环的初始化
- C++11:是否有理由为什么某些常规类型不应该专门使用“std::hash”
- 是否有理由不使用单元强制类型
- C++:是否有理由使用uint64_t而不是size_t
- 是否有理由使用字符串 => 索引到向量的映射,而不是字符串 => 对象?
- 有理由使用"::template"吗?
- C++服务器有时会崩溃
- 在这段代码中,是否有理由对字符串文字使用const_cast
- 是否有理由无法默认构造具有空捕获列表的 lambda?
- 是否有理由不从可执行文件中删除符号?