Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема с QJson

5.7K
22 августа 2011 года
Lindemann66
193 / / 21.07.2011
Всем привет!

Разбираюсь с 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;
}


Сам класс 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;
};


Но при сборке появляются непонятные мне ошибки
Цитата:

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)'



Может мне кто-то помочь разобраться с тем, как их исправить?
Буду благодарен за любые советы

277
22 августа 2011 года
arrjj
1.7K / / 26.01.2011
1. У тебя использование QJson неправильное - считывай из файла сразу всё (readAll()) и только потом парсь
2. По ошибкам в сборке сложно сразу сказать почитай http://doc.qt.nokia.com/latest/properties.html а уж если не получиться выложи полностью cpp и h файлы твоего Log'а да и ошибки полностью посмотри - там же в них есть доп информация, достаточно внятно разъясняющая что нужно сделать чтоб их исправить
5.7K
22 августа 2011 года
Lindemann66
193 / / 21.07.2011
Спасибо, но я ещё до обеда разобрался:)
Вобщем, теперь код таков

"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;
};


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


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


Ошибок нет, код работает корректно, что не может не радовать :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог