PepeMoreno
19th April 2011, 19:08
I have a custom datatype called "Repository", which has a QSettings object as a member. I'm implementing the >> stream operator and having trouble while retrieving the QSettings object from the stream as I can't stream directly to QSettings (or so it seems). Is it possible to stream data to a QSettings object? If so, how should I proceed?
The relevant code is:
class Repository::Private {
public:
QString location;
QSettings* settings;
Private()
: location()
, settings(0)
{}
};
Repository::Repository(QObject *parent)
: QObject(parent)
, data(new Private)
{}
QDataStream& operator>> (QDataStream& stream, Repository::Ptr& repository)
{
QString location;
QSettings* settings;
stream >> location;
stream >> settings; /* Can't stream to QSettings */
if (stream.status() != QDataStream::Ok) {
Core::EncodingError e;
e.setDescription("The policy configuration could not be decoded");
throw e;
}
repository->data->location = location;
repository->data->settings = settings;
return stream;
}
The error message:
../../../Workdir/policy-control/policy-control/policy/repository.cpp: In function ‘QDataStream& Policy::operator>>(QDataStream&, Policy::Repository*&)’:
../../../Workdir/policy-control/policy-control/policy/repository.cpp:517: error: no match for ‘operator>>’ in ‘stream >> settings’
../../../install/qtsdk-2010.02/qt/include/QtCore/qdatastream.h:141: note: candidates are: QDataStream& QDataStream::operator>>(qint8&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qdatastream.h:215: note: QDataStream& QDataStream::operator>>(quint8&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qdatastream.h:143: note: QDataStream& QDataStream::operator>>(qint16&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qdatastream.h:218: note: QDataStream& QDataStream::operator>>(quint16&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qdatastream.h:145: note: QDataStream& QDataStream::operator>>(qint32&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qdatastream.h:221: note: QDataStream& QDataStream::operator>>(quint32&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qdatastream.h:147: note: QDataStream& QDataStream::operator>>(qint64&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qdatastream.h:224: note: QDataStream& QDataStream::operator>>(quint64&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qdatastream.h:150: note: QDataStream& QDataStream::operator>>(bool&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qdatastream.h:151: note: QDataStream& QDataStream::operator>>(float&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qdatastream.h:152: note: QDataStream& QDataStream::operator>>(double&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qdatastream.h:153: note: QDataStream& QDataStream::operator>>(char*&)
../../../Workdir/policy-control/policy-control/policy/repository.cpp:499: note: QDataStream& Policy::operator>>(QDataStream&, Policy::Repository*&)
../../../install/qtsdk-2010.02/qt/include/QtCore/quuid.h:183: note: QDataStream& operator>>(QDataStream&, QUuid&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qrect.h:622: note: QDataStream& operator>>(QDataStream&, QRectF&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qrect.h:200: note: QDataStream& operator>>(QDataStream&, QRect&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qsize.h:256: note: QDataStream& operator>>(QDataStream&, QSizeF&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qsize.h:103: note: QDataStream& operator>>(QDataStream&, QSize&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qline.h:417: note: QDataStream& operator>>(QDataStream&, QLineF&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qline.h:206: note: QDataStream& operator>>(QDataStream&, QLine&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qpoint.h:238: note: QDataStream& operator>>(QDataStream&, QPointF&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qpoint.h:104: note: QDataStream& operator>>(QDataStream&, QPoint&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qdatetime.h:321: note: QDataStream& operator>>(QDataStream&, QDateTime&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qdatetime.h:319: note: QDataStream& operator>>(QDataStream&, QTime&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qdatetime.h:317: note: QDataStream& operator>>(QDataStream&, QDate&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qbitarray.h:164: note: QDataStream& operator>>(QDataStream&, QBitArray&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qurl.h:277: note: QDataStream& operator>>(QDataStream&, QUrl&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qvariant.h:531: note: QDataStream& operator>>(QDataStream&, QVariant::Type&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qvariant.h:529: note: QDataStream& operator>>(QDataStream&, QVariant&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qtextstream.h:287: note: QTextStream& operator>>(QTextStream&, QTextStream& (*)(QTextStream&))
../../../install/qtsdk-2010.02/qt/include/QtCore/qlocale.h:669: note: QDataStream& operator>>(QDataStream&, QLocale&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qstringlist.h:245: note: QDataStream& operator>>(QDataStream&, QStringList&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qregexp.h:155: note: QDataStream& operator>>(QDataStream&, QRegExp&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qstring.h:1070: note: QDataStream& operator>>(QDataStream&, QString&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qbytearray.h:577: note: QDataStream& operator>>(QDataStream&, QByteArray&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qchar.h:390: note: QDataStream& operator>>(QDataStream&, QChar&)
../../../Workdir/policy-control/policy-control/policy/repository.cpp:510: warning: unused variable ‘m_effectiveCurrentPolicyOrigin’
make[1]: *** [repository.o] Error 1
The relevant code is:
class Repository::Private {
public:
QString location;
QSettings* settings;
Private()
: location()
, settings(0)
{}
};
Repository::Repository(QObject *parent)
: QObject(parent)
, data(new Private)
{}
QDataStream& operator>> (QDataStream& stream, Repository::Ptr& repository)
{
QString location;
QSettings* settings;
stream >> location;
stream >> settings; /* Can't stream to QSettings */
if (stream.status() != QDataStream::Ok) {
Core::EncodingError e;
e.setDescription("The policy configuration could not be decoded");
throw e;
}
repository->data->location = location;
repository->data->settings = settings;
return stream;
}
The error message:
../../../Workdir/policy-control/policy-control/policy/repository.cpp: In function ‘QDataStream& Policy::operator>>(QDataStream&, Policy::Repository*&)’:
../../../Workdir/policy-control/policy-control/policy/repository.cpp:517: error: no match for ‘operator>>’ in ‘stream >> settings’
../../../install/qtsdk-2010.02/qt/include/QtCore/qdatastream.h:141: note: candidates are: QDataStream& QDataStream::operator>>(qint8&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qdatastream.h:215: note: QDataStream& QDataStream::operator>>(quint8&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qdatastream.h:143: note: QDataStream& QDataStream::operator>>(qint16&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qdatastream.h:218: note: QDataStream& QDataStream::operator>>(quint16&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qdatastream.h:145: note: QDataStream& QDataStream::operator>>(qint32&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qdatastream.h:221: note: QDataStream& QDataStream::operator>>(quint32&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qdatastream.h:147: note: QDataStream& QDataStream::operator>>(qint64&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qdatastream.h:224: note: QDataStream& QDataStream::operator>>(quint64&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qdatastream.h:150: note: QDataStream& QDataStream::operator>>(bool&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qdatastream.h:151: note: QDataStream& QDataStream::operator>>(float&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qdatastream.h:152: note: QDataStream& QDataStream::operator>>(double&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qdatastream.h:153: note: QDataStream& QDataStream::operator>>(char*&)
../../../Workdir/policy-control/policy-control/policy/repository.cpp:499: note: QDataStream& Policy::operator>>(QDataStream&, Policy::Repository*&)
../../../install/qtsdk-2010.02/qt/include/QtCore/quuid.h:183: note: QDataStream& operator>>(QDataStream&, QUuid&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qrect.h:622: note: QDataStream& operator>>(QDataStream&, QRectF&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qrect.h:200: note: QDataStream& operator>>(QDataStream&, QRect&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qsize.h:256: note: QDataStream& operator>>(QDataStream&, QSizeF&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qsize.h:103: note: QDataStream& operator>>(QDataStream&, QSize&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qline.h:417: note: QDataStream& operator>>(QDataStream&, QLineF&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qline.h:206: note: QDataStream& operator>>(QDataStream&, QLine&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qpoint.h:238: note: QDataStream& operator>>(QDataStream&, QPointF&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qpoint.h:104: note: QDataStream& operator>>(QDataStream&, QPoint&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qdatetime.h:321: note: QDataStream& operator>>(QDataStream&, QDateTime&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qdatetime.h:319: note: QDataStream& operator>>(QDataStream&, QTime&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qdatetime.h:317: note: QDataStream& operator>>(QDataStream&, QDate&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qbitarray.h:164: note: QDataStream& operator>>(QDataStream&, QBitArray&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qurl.h:277: note: QDataStream& operator>>(QDataStream&, QUrl&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qvariant.h:531: note: QDataStream& operator>>(QDataStream&, QVariant::Type&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qvariant.h:529: note: QDataStream& operator>>(QDataStream&, QVariant&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qtextstream.h:287: note: QTextStream& operator>>(QTextStream&, QTextStream& (*)(QTextStream&))
../../../install/qtsdk-2010.02/qt/include/QtCore/qlocale.h:669: note: QDataStream& operator>>(QDataStream&, QLocale&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qstringlist.h:245: note: QDataStream& operator>>(QDataStream&, QStringList&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qregexp.h:155: note: QDataStream& operator>>(QDataStream&, QRegExp&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qstring.h:1070: note: QDataStream& operator>>(QDataStream&, QString&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qbytearray.h:577: note: QDataStream& operator>>(QDataStream&, QByteArray&)
../../../install/qtsdk-2010.02/qt/include/QtCore/qchar.h:390: note: QDataStream& operator>>(QDataStream&, QChar&)
../../../Workdir/policy-control/policy-control/policy/repository.cpp:510: warning: unused variable ‘m_effectiveCurrentPolicyOrigin’
make[1]: *** [repository.o] Error 1