QT 遇到的错误记录

1. error: call to implicitly-deleted copy constructor of

    具说是构造函数变量没有初始化,我是将我自己的对象insert进Qmap遇到的,所以我是将对象new一个解决的 :  MYObj*  obj = new MYObj(this);


2. Pure virtual function called!程序异常结束。

  程序正常运行关闭时,报出错误,我是由这个代码出错的,initDatabse里面的一些操作不能放要构造函数里,目前没有好的解决办法,那么只有运行每个方法时再去检查初始化吧,我的代码是这样的:由于是要用单例模式,initDatabase()方法,不能放在 构造方法中..

最后这是一个乌龙:这不是构造方法的问题,也不是 单例模式的问题,问题是QSqlDatabase database; 这个东东的问题,由于之前做ios的习惯,将之放在了类的成员变量,将这个变量去掉,在每个方法里都使用:QSqlDatabase database = QSqlDatabase::addDatabase("QSQLITE");就没问题了。

#ifndef DATABASEMANAGER_H
#define DATABASEMANAGER_H

#include <QObject>
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
#include <QDebug>
#include <QDateTime>
#include "networktaskdefine.h"
#include "databasetabledefine.h"

#define cout qDebug() << "[" <<__FILE__ <<":"<<__FUNCTION__<<":"<<__LINE__ <<"]"

class DataBaseManager : public QObject
{
    Q_OBJECT
public:

    explicit DataBaseManager(QObject *parent = 0);
    static DataBaseManager* Instance();
    ~DataBaseManager();

    void addTask(T_JB_NetworkTask task);
    void deteTask(QString key);
    void updateTaskProgress(T_JB_NetworkTask task);
    void updateTaskState(T_JB_NetworkTask task);
    T_JB_NetworkTask queryTask(QString key);

private:

    void initDatabase();

    T_JB_NetworkTask parseTaskFromQuery(QSqlQuery sqlQuery);

    QSqlDatabase database;


};

#endif // DATABASEMANAGER_H

#include "databasemanager.h"

DataBaseManager* DataBaseManager::Instance()
{
    static QMutex mutex;
    static QScopedPointer<DataBaseManager> inst;
    if (Q_UNLIKELY(!inst)) {
        mutex.lock();
        if (!inst) {
            inst.reset(new DataBaseManager);
        }
        mutex.unlock();
    }
    return inst.data();
}

DataBaseManager::DataBaseManager(QObject *parent) : QObject(parent)
{
    cout << "init";
    //initDatabase();
}

DataBaseManager::~DataBaseManager()
{
    cout << "delete self";
}

void DataBaseManager::initDatabase()
{
    //cout <<  QSqlDatabase::drivers();
    cout << "init self";

    database = QSqlDatabase::addDatabase("QSQLITE");
    database.setDatabaseName("Network.db");

    if (!database.open())
    {
        cout << "Error: Failed to connect database." << database.lastError();
        return;
    }

    QString create_sql = "create table if not exists 此处语句省略" );

    cout << create_sql;

    QSqlQuery sqlQuery;
    sqlQuery.prepare(create_sql);

    if(sqlQuery.exec())
    {
       cout <<  " created!";
    }else{
       cout << "Error: Fail to create table." << sqlQuery.lastError();
    }
}



你可能感兴趣的:(QT 遇到的错误记录)