Проблема с QJson
Разбираюсь с QJson
Написал код для инициализации объекта класса JSon'ом
За основу взял код со страницы QObjct serialization and vice-versa
Код:
//процедура парсинга логера
QList<Log*> SystemTray::ParseLog() {
//список логов
QList<Log*> log;
QFile file(config.log);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
QMessageBox::warning(0, QObject::tr("File error"), QObject::tr("Open file error!"));
//return log;
}
while (!file.atEnd()) {
QByteArray line = file.readLine();
bool ok;
QJson::Parser parser;
const QVariantMap variant = parser.parse(line, &ok).toMap();
if (!ok) {
QMessageBox::warning(0, QObject::tr("Parsing error"), QObject::tr("Parsing error"));
exit(1);
}
Log* logItem = new Log();
//инициализируем объект лога
QJson::QObjectHelper::qvariant2qobject(variant, logItem);
log.push_back(logItem);
delete logItem;
}
return log;
}
QList<Log*> SystemTray::ParseLog() {
//список логов
QList<Log*> log;
QFile file(config.log);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
QMessageBox::warning(0, QObject::tr("File error"), QObject::tr("Open file error!"));
//return log;
}
while (!file.atEnd()) {
QByteArray line = file.readLine();
bool ok;
QJson::Parser parser;
const QVariantMap variant = parser.parse(line, &ok).toMap();
if (!ok) {
QMessageBox::warning(0, QObject::tr("Parsing error"), QObject::tr("Parsing error"));
exit(1);
}
Log* logItem = new Log();
//инициализируем объект лога
QJson::QObjectHelper::qvariant2qobject(variant, logItem);
log.push_back(logItem);
delete logItem;
}
return log;
}
Сам класс Log
Код:
class Log : public QObject {
Q_OBJECT
Q_PROPERTY(QString url READ url WRITE setUrl)
Q_PROPERTY(long date READ date WRITE setDate)
Q_PROPERTY(long lookupTime READ lookupTime WRITE setLookupTime)
public:
Log(QObject* parent = 0);
~Log();
public:
//сам url
QString url() const;
void setUrl(const QString& name);
//дата просмотра
long date() const;
void setDate(const long date);
//сколько времени находился на странице
long lookupTime() const;
void setLookupTime(const long lookupTime);
private:
//сам url
QString m_url;
//дата просмотра
long m_date;
//сколько времени находился на странице
long m_lookupTime;
};
Q_OBJECT
Q_PROPERTY(QString url READ url WRITE setUrl)
Q_PROPERTY(long date READ date WRITE setDate)
Q_PROPERTY(long lookupTime READ lookupTime WRITE setLookupTime)
public:
Log(QObject* parent = 0);
~Log();
public:
//сам url
QString url() const;
void setUrl(const QString& name);
//дата просмотра
long date() const;
void setDate(const long date);
//сколько времени находился на странице
long lookupTime() const;
void setLookupTime(const long lookupTime);
private:
//сам url
QString m_url;
//дата просмотра
long m_date;
//сколько времени находился на странице
long m_lookupTime;
};
Но при сборке появляются непонятные мне ошибки
Цитата:
error: undefined reference to `Log::Log(QObject*)'
error: undefined reference to `Log::url() const'
error: undefined reference to `Log::date() const'
error: undefined reference to `Log::lookupTime() const'
error: undefined reference to `Log::setUrl(QString const&)'
error: undefined reference to `Log::setDate(long)'
error: undefined reference to `Log::setLookupTime(long)'
Может мне кто-то помочь разобраться с тем, как их исправить?
Буду благодарен за любые советы
2. По ошибкам в сборке сложно сразу сказать почитай http://doc.qt.nokia.com/latest/properties.html а уж если не получиться выложи полностью cpp и h файлы твоего Log'а да и ошибки полностью посмотри - там же в них есть доп информация, достаточно внятно разъясняющая что нужно сделать чтоб их исправить
Вобщем, теперь код таков
"Classes.h"
Код:
class Log : public QObject {
Q_OBJECT
Q_PROPERTY(QString url READ url WRITE setUrl)
Q_PROPERTY(long date READ date WRITE setDate)
Q_PROPERTY(long lookupTime READ lookupTime WRITE setLookupTime)
public:
explicit Log(QObject *parent = 0);
public:
//сам url
QString url() const { return m_url; }
void setUrl(QString url);
//дата просмотра
long date() const { return m_date; }
void setDate(long date);
//сколько времени находился на странице
long lookupTime() const { return m_lookupTime; }
void setLookupTime(long lookupTime);
private:
//сам url
QString m_url;
//дата просмотра
long m_date;
//сколько времени находился на странице
long m_lookupTime;
};
Q_OBJECT
Q_PROPERTY(QString url READ url WRITE setUrl)
Q_PROPERTY(long date READ date WRITE setDate)
Q_PROPERTY(long lookupTime READ lookupTime WRITE setLookupTime)
public:
explicit Log(QObject *parent = 0);
public:
//сам url
QString url() const { return m_url; }
void setUrl(QString url);
//дата просмотра
long date() const { return m_date; }
void setDate(long date);
//сколько времени находился на странице
long lookupTime() const { return m_lookupTime; }
void setLookupTime(long lookupTime);
private:
//сам url
QString m_url;
//дата просмотра
long m_date;
//сколько времени находился на странице
long m_lookupTime;
};
Classes.cpp
Код:
#include "Classes.h"
Log::Log(QObject *parent) : QObject(parent) {
}
void Log::setUrl(QString url) {
m_url = url;
}
void Log::setDate(long date) {
m_date = date;
}
void Log::setLookupTime(long lookupTime) {
m_lookupTime = lookupTime;
}
Log::Log(QObject *parent) : QObject(parent) {
}
void Log::setUrl(QString url) {
m_url = url;
}
void Log::setDate(long date) {
m_date = date;
}
void Log::setLookupTime(long lookupTime) {
m_lookupTime = lookupTime;
}
main.cpp
Код:
//процедура парсинга логера
QList<Log*> SystemTray::ParseLog() {
//список логов
QList<Log*> log;
QFile file(config.log);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
QMessageBox::warning(0, QObject::tr("File error"), QObject::tr("Open file error!"));
//return log;
}
while (!file.atEnd()) {
QByteArray line = file.readLine();
bool ok;
QJson::Parser parser;
const QVariantMap variant = parser.parse(line, &ok).toMap();
if (!ok) {
QMessageBox::warning(0, QObject::tr("Parsing error"), QObject::tr("Parsing error"));
exit(1);
}
Log* logItem = new Log();
//инициализируем объект лога
QJson::QObjectHelper::qvariant2qobject(variant, logItem);
log.push_back(logItem);
delete logItem;
}
return log;
}
QList<Log*> SystemTray::ParseLog() {
//список логов
QList<Log*> log;
QFile file(config.log);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
QMessageBox::warning(0, QObject::tr("File error"), QObject::tr("Open file error!"));
//return log;
}
while (!file.atEnd()) {
QByteArray line = file.readLine();
bool ok;
QJson::Parser parser;
const QVariantMap variant = parser.parse(line, &ok).toMap();
if (!ok) {
QMessageBox::warning(0, QObject::tr("Parsing error"), QObject::tr("Parsing error"));
exit(1);
}
Log* logItem = new Log();
//инициализируем объект лога
QJson::QObjectHelper::qvariant2qobject(variant, logItem);
log.push_back(logItem);
delete logItem;
}
return log;
}
Ошибок нет, код работает корректно, что не может не радовать :)