Я получаю ошибку 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.ч
#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);
}
Есть идеи о том, что мне не хватает в этом фрагменте кода?Спасибо, что пролил свет на это.