Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.08.2011, 11:29   #1
Lindemann66
Форумчанин
 
Регистрация: 28.02.2011
Сообщений: 127
Радость Проблема с 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;
}
Сам класс 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:ate() 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)'
Может мне кто-то помочь разобраться с тем, как их исправить?
Буду благодарен за любые советы
Lindemann66 вне форума Ответить с цитированием
Старый 22.08.2011, 13:00   #2
Lindemann66
Форумчанин
 
Регистрация: 28.02.2011
Сообщений: 127
По умолчанию

Ошибку исправил сам
Теперь код таков

"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;
}
Ошибок нет, код работает корректно, что не может не радовать
Lindemann66 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Компилирование QJson Lindemann66 Qt и кроссплатформенное программирование С/С++ 2 19.08.2011 10:35
Проблема с рамами/Проблема с ЖД DRAGGER Компьютерное железо 6 04.01.2009 23:37