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(); } }