QSQLDATABASE:SIGSEV初始化错误



我正在从编译器中获得SIGSEV错误,但我不确定为什么。我正在尝试将示例数据保存在QTableView上。为此,我创建了一小部分参数,在类dataInfo中,我创建了一个initDataBase(const QString &nameDB)函数来初始化数据库。当我运行小的.UI时,编译器在QSqlDatabase::addDatabase("QSQLITE");失败。同样,要划出其中一个选项,我在.pro文件上添加了QT += core gui sql语句作为标准过程,但仍然没有运气。

我遵循的过程是:

1)设置参数如下:

imageParam.h

#ifndef IMAGEPARAM_H
#define IMAGEPARAM_H
#include <QString>
typedef struct Param
{
    int mId;
    QString mPath1;
    QString mPath2;
    QByteArray mImage1;
    QByteArray mImage2;
} Param;
class ImageParam
{
public:
    ImageParam(Param newdata);
    ImageParam(int id, const QString &path1, QString &path2,
               const QByteArray &image1, const QByteArray &image2);
    int id() const { return data.mId; }
    QString path1() const { return data.mPath1; }
    QString path2() const { return data.mPath2; }
    QByteArray image1() { return data.mImage1; }
    QByteArray image2() { return data.mImage1; }
private:
    Param data;
};

imageParam.cpp

#include "imageparam.h"
ImageParam::ImageParam(Param newdata)
{
    data = newdata;
}
ImageParam::ImageParam(int id, const QString &path1, QString &path2,
                       const QByteArray &image1, const QByteArray &image2)
{
    data.mId = id;
    data.mPath1 = path1;
    data.mPath2 = path2;
    data.mImage1 = image1;
    data.mImage2 = image2;
}

2)设置QSQLITE数据库

datainfo.h

#ifndef DATAINFO_H
#define DATAINFO_H
#include <QObject>
#include <QtSql/QSqlDatabase>
#include "imageparam.h"
class dataInfo : public QObject
{
    Q_OBJECT
public:
    explicit dataInfo(QObject *parent = nullptr);
    QString getError() const { return mError; }
    bool initDataBase(const QString &nameDB);
    bool confDataBase();
    bool addItem(ImageParam* imageItem);
    bool updateItem(int idItem, ImageParam* imageItem);
    QSqlDatabase getDatabase();
private:
    QString mError;
    QSqlDatabase mDBImages;
};
#endif // DATAINFO_H

datainfo.cpp

#include "datainfo.h"
#include <QtSql/QSqlQuery>
#include <QtSql/QSqlError>
#include <QDebug>
#include <QVariant>
#define CREATE_TABLE 
    " CREATE TABLE IF NOT EXISTS imageTable" 
    " (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL" 
    " path1 TEXT NOT NULL" 
    " path2 TEXT NOT NULL" 
    " imageA BLOB NOT NULL" 
    " imageB BLOB NOT NULL)"
dataInfo::dataInfo(QObject *parent) : QObject(parent)
{}
bool dataInfo::initDataBase(const QString &nameDB)
{
    mDBImages = QSqlDatabase::addDatabase("QSQLITE"); // <-- ERROR HERE
    mDBImages.setDatabaseName(nameDB);
    bool ok = mDBImages.open();
    if(!ok) {
        mError = mDBImages.lastError().text();
        qDebug() << mError;
    }
    return ok;
}

3)在mainwindow.cpp 上,我正在实例化:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "datainfo.h"
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        // temporary folder
        temporaryFolder = "/home/to/Desktop/folder/tmp.db";
        QFile dbRem(temporaryFolder);
        dbRem.remove();
        mNewDatabaseImages->initDataBase(temporaryFolder); // <-- ERROR HERE
        mNewDatabaseImages->confDataBase();
        mNewTableImages = new QSqlTableModel(this, mNewDatabaseImages->getDatabase());
        mNewTableImages->setTable("imageTable");
        mNewTableImages->select();
        ui->bookMarkTableView->setModel(mNewTableImages);
        ui->bookMarkTableView->showColumn(true);
    }

对我在这件代码中所缺少的东西有什么想法吗?感谢您对此进行启示。

@ emanuele,我认为您缺少SQL上的某些语法,尝试在您上切换 datainfo.cpp

#include "datainfo.h"
#define CREATE_TABLE 
    " CREATE TABLE IF NOT EXISTS yourTable" 
    " (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL" 
    " path1 TEXT NOT NULL" 
    " path2 TEXT NOT NULL" 
    " imageA BLOB NOT NULL" 
    " imageB BLOB NOT NULL)"

使用以下代码

#include "datainfo.h"
#define CREATE_TABLE 
    " CREATE TABLE IF NOT EXISTS yourTable" 
    " (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL" 
    ", path1 TEXT NOT NULL" 
    ", path2 TEXT NOT NULL" 
    ", imageA BLOB NOT NULL" 
    ", imageB BLOB NOT NULL)"

最新更新