Я пытаюсь сохранить перечисление в базе данных SQLite с помощью QSql. У меня есть следующий класс:Как сохранить перечисление в базе данных SQLite
partydao.h:
class PartyDao : public QObject
{
public:
enum partyType { typeCompany, typePerson };
private:
Q_OBJECT
Q_ENUMS(partyType)
Q_PROPERTY(partyType type READ type WRITE set_type)
// other declarations
};
Q_DECLARE_METATYPE(PartyDao::partyType)
partydao.cpp:
#include "partydao.h"
static int id = qRegisterMetaType<PartyDao::partyType>("partyType");
Я вставить так:
PartyDao p;
p.setProperty("type", QVariant::fromValue(PartyDao::typePerson));
QSqlQuery query;
query.prepare("INSERT INTO party (type) values (:type)");
qDebug() << p.property("type").isNull();
query.bindValue(":type", p.property("type"));
query.exec();
Althou gh qDebug() печатает "false" (т. свойство не null), значение null хранится в db.
Я пробовал с колонкой типа TEXT и INTEGER без успеха.
Можете ли вы сказать мне, что я делаю неправильно?
EDIT:
Я только что проверил и QVariant затаив перечисление утверждает, что она не может быть преобразована в QString или Int (canConvert<int>()
и canConvert<QString>()
возвратной ложь). Есть ли способ добавить это преобразование?
Если первый счетчик не имеет начального значения, он по умолчанию присваивается 0. – zarzych 2010-12-10 08:51:38