Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > QDebug() << QVariant(Custom Type);


Автор: Sahab 20.1.2012, 13:14
Есть ли возможность вывода кастомного типа обернутого в QVariant в QDebug()?

Код

#include <iostream>
#include <string>

#include <QBuffer>
#include <QMetaType>
#include <QVariant>
#include <QtDebug>
#include <QDataStream>

Q_DECLARE_METATYPE(std::string)

QDataStream &operator<<(QDataStream &out, const std::string &myObj) {
    std::cout << __PRETTY_FUNCTION__ << myObj << std::endl;
    out << myObj.c_str();
    return out;
}

QDataStream &operator>>(QDataStream &in, std::string &myObj) {
    std::cout << __PRETTY_FUNCTION__ << myObj << std::endl;
    QByteArray bytes;
    in >> bytes;
    myObj.assign(bytes.data(), bytes.size());
    return in;
}

QDebug operator<<(QDebug dbg, const std::string& str)
{
    std::cout << __PRETTY_FUNCTION__ << std::endl;
    dbg.nospace() << str.c_str();
    return dbg.space();
}

int main(int argc, char *argv[])
{
    int string_id = qRegisterMetaType<std::string>("std::string");
    qRegisterMetaTypeStreamOperators<std::string>("std::string");
    QApplication app(argc, argv);

    std::string str("ololo");
    qDebug() << str; // "ololo"
    qDebug() << QVariant(string_id, &str); // "QVariant(std::string, )"
    qDebug() << QVariant(string_id, &str).value<std::string>(); // "ololo"
}



имею в виду вывод "QVariant(std::string, )"
т.е. тип выводится, но значение - нет.

собсно, как сделать, чтоб выводилось и значение.

thx

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)