[Qt4][SOLVED] Odczyt QVectora przez QDataStream

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
bfo
Piegowaty Guziec
Piegowaty Guziec
Posty: 21
Rejestracja: 24 lut 2008, 19:05
Płeć: Mężczyzna
Wersja Ubuntu: 8.10
Środowisko graficzne: GNOME
Kontakt:

[Qt4][SOLVED] Odczyt QVectora przez QDataStream

Post autor: bfo »

Witam
Chciałbym się dowiedzieć, dlaczego podczas zapisu dziwoląga

Kod: Zaznacz cały

QDataStream file(&File2);
QVector< QVector<QTableWidgetItem*> > v;
<zapełnienie v>
file << v;
nie otrzymuję żadnych błędów kompilacji, a przy próbie odczytu:

Kod: Zaznacz cały

QVector< QVector<QTableWidgetItem*> > v_read;
file >> v_read;
wypluwa litanię:

Kod: Zaznacz cały

/home/***/sources/filesupport.cpp:132: error: no match for ?operator>>? in ?file >> v_read?
/usr/include/qt4/QtCore/qdatastream.h:126: note: candidates are: QDataStream& QDataStream::operator>>(qint8&)
/usr/include/qt4/QtCore/qdatastream.h:200: note:                 QDataStream& QDataStream::operator>>(quint8&)
/usr/include/qt4/QtCore/qdatastream.h:128: note:                 QDataStream& QDataStream::operator>>(qint16&)
/usr/include/qt4/QtCore/qdatastream.h:203: note:                 QDataStream& QDataStream::operator>>(quint16&)
/usr/include/qt4/QtCore/qdatastream.h:130: note:                 QDataStream& QDataStream::operator>>(qint32&)
/usr/include/qt4/QtCore/qdatastream.h:206: note:                 QDataStream& QDataStream::operator>>(quint32&)
/usr/include/qt4/QtCore/qdatastream.h:132: note:                 QDataStream& QDataStream::operator>>(qint64&)
/usr/include/qt4/QtCore/qdatastream.h:209: note:                 QDataStream& QDataStream::operator>>(quint64&)
/usr/include/qt4/QtCore/qdatastream.h:135: note:                 QDataStream& QDataStream::operator>>(bool&)
/usr/include/qt4/QtCore/qdatastream.h:136: note:                 QDataStream& QDataStream::operator>>(float&)
/usr/include/qt4/QtCore/qdatastream.h:137: note:                 QDataStream& QDataStream::operator>>(double&)
/usr/include/qt4/QtCore/qdatastream.h:138: note:                 QDataStream& QDataStream::operator>>(char*&)
/usr/include/qt4/QtCore/qchar.h:386: note:                 QDataStream& operator>>(QDataStream&, QChar&)
/usr/include/qt4/QtCore/qbytearray.h:565: note:                 QDataStream& operator>>(QDataStream&, QByteArray&)
/usr/include/qt4/QtCore/qstring.h:1022: note:                 QDataStream& operator>>(QDataStream&, QString&)
/usr/include/qt4/QtCore/qtextstream.h:278: note:                 QTextStream& operator>>(QTextStream&, QTextStream& (*)(QTextStream&))
/usr/include/qt4/QtCore/qsize.h:98: note:                 QDataStream& operator>>(QDataStream&, QSize&)
/usr/include/qt4/QtCore/qsize.h:249: note:                 QDataStream& operator>>(QDataStream&, QSizeF&)
/usr/include/qt4/QtCore/qpoint.h:99: note:                 QDataStream& operator>>(QDataStream&, QPoint&)
/usr/include/qt4/QtCore/qpoint.h:231: note:                 QDataStream& operator>>(QDataStream&, QPointF&)
/usr/include/qt4/QtCore/qrect.h:195: note:                 QDataStream& operator>>(QDataStream&, QRect&)
/usr/include/qt4/QtCore/qrect.h:617: note:                 QDataStream& operator>>(QDataStream&, QRectF&)
/usr/include/qt4/QtCore/qregexp.h:138: note:                 QDataStream& operator>>(QDataStream&, QRegExp&)
/usr/include/qt4/QtCore/qstringlist.h:220: note:                 QDataStream& operator>>(QDataStream&, QStringList&)
/usr/include/qt4/QtGui/qcolor.h:238: note:                 QDataStream& operator>>(QDataStream&, QColor&)
/usr/include/qt4/QtGui/qpolygon.h:100: note:                 QDataStream& operator>>(QDataStream&, QPolygon&)
/usr/include/qt4/QtGui/qpolygon.h:159: note:                 QDataStream& operator>>(QDataStream&, QPolygonF&)
/usr/include/qt4/QtGui/qregion.h:198: note:                 QDataStream& operator>>(QDataStream&, QRegion&)
/usr/include/qt4/QtCore/qline.h:202: note:                 QDataStream& operator>>(QDataStream&, QLine&)
/usr/include/qt4/QtCore/qline.h:413: note:                 QDataStream& operator>>(QDataStream&, QLineF&)
/usr/include/qt4/QtGui/qmatrix.h:155: note:                 QDataStream& operator>>(QDataStream&, QMatrix&)
/usr/include/qt4/QtGui/qpainterpath.h:229: note:                 QDataStream& operator>>(QDataStream&, QPainterPath&)
/usr/include/qt4/QtGui/qtransform.h:307: note:                 QDataStream& operator>>(QDataStream&, QTransform&)
/usr/include/qt4/QtGui/qimage.h:336: note:                 QDataStream& operator>>(QDataStream&, QImage&)
/usr/include/qt4/QtGui/qpixmap.h:282: note:                 QDataStream& operator>>(QDataStream&, QPixmap&)
/usr/include/qt4/QtGui/qbrush.h:146: note:                 QDataStream& operator>>(QDataStream&, QBrush&)
/usr/include/qt4/QtGui/qpalette.h:251: note:                 QDataStream& operator>>(QDataStream&, QPalette&)
/usr/include/qt4/QtGui/qfont.h:338: note:                 QDataStream& operator>>(QDataStream&, QFont&)
/usr/include/qt4/QtGui/qsizepolicy.h:204: note:                 QDataStream& operator>>(QDataStream&, QSizePolicy&)
/usr/include/qt4/QtGui/qcursor.h:148: note:                 QDataStream& operator>>(QDataStream&, QCursor&)
/usr/include/qt4/QtGui/qkeysequence.h:193: note:                 QDataStream& operator>>(QDataStream&, QKeySequence&)
/usr/include/qt4/QtCore/qvariant.h:488: note:                 QDataStream& operator>>(QDataStream&, QVariant&)
/usr/include/qt4/QtCore/qvariant.h:490: note:                 QDataStream& operator>>(QDataStream&, QVariant::Type&)
/usr/include/qt4/QtCore/qlocale.h:649: note:                 QDataStream& operator>>(QDataStream&, QLocale&)
/usr/include/qt4/QtGui/qicon.h:126: note:                 QDataStream& operator>>(QDataStream&, QIcon&)
/usr/include/qt4/QtGui/qtablewidget.h:210: note:                 QDataStream& operator>>(QDataStream&, QTableWidgetItem&)
/usr/include/qt4/QtCore/qdatetime.h:300: note:                 QDataStream& operator>>(QDataStream&, QDate&)
/usr/include/qt4/QtCore/qdatetime.h:302: note:                 QDataStream& operator>>(QDataStream&, QTime&)
/usr/include/qt4/QtCore/qdatetime.h:304: note:                 QDataStream& operator>>(QDataStream&, QDateTime&)
make[2]: *** [***sources/filesupport.cpp.o] Błąd 1
make[1]: *** [***/all] Błąd 2
make: *** [all] Błąd 2
Przerzucając stronice dokumentacji Qt4.4 nie znalazłem niczego poza tym, że istnieje konglomerat

Kod: Zaznacz cały

QDataStream & operator>> ( QDataStream & in, QVector<T> & vector )
Niestety zbyt wiele mi to nie mówi. Jeśli będzie potrzebny cały kod problematycznej funkcji, to służę pomocą.
#480909 Registered Happy Linux User
adrian5632
Przyjaciel
Przyjaciel
Posty: 259
Rejestracja: 17 gru 2006, 16:07
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: KDE Plasma

Odp: [Qt4] Odczyt QVectora przez QDataStream

Post autor: adrian5632 »

Nie wiem, co chcesz osiągnąć, ale od razu mówię, że elementów QTableWidgetItem* nie zapiszesz do pliku - co najwyżej zostaną zapisane adresy obiektów. Zapewne dlatego możesz zapisać do pliku bez błędów kompilacji (bo wskaźniki ów elementów są konwertowane na liczby).
[IMG]http://www.ubudsl.com/media/UbuDSL.png[/IMG]
Masz problem z UbuDSL? Nie zapomnij wygenerować i załączyć loga do postu!
bfo
Piegowaty Guziec
Piegowaty Guziec
Posty: 21
Rejestracja: 24 lut 2008, 19:05
Płeć: Mężczyzna
Wersja Ubuntu: 8.10
Środowisko graficzne: GNOME
Kontakt:

Odp: [Qt4] Odczyt QVectora przez QDataStream

Post autor: bfo »

O, dzięki za wskazanie problemu. W takim razie chcąc zapisać vector vectorów muszę iterować po nich "na piechotę", czy tak?
#480909 Registered Happy Linux User
adrian5632
Przyjaciel
Przyjaciel
Posty: 259
Rejestracja: 17 gru 2006, 16:07
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: KDE Plasma

Odp: [Qt4] Odczyt QVectora przez QDataStream

Post autor: adrian5632 »

Nie, ale nie możesz zapisać wektora wskaźników (tzn. możesz, ale zapiszesz same adresy, a przy odczytywaniu danych nie ma to w ogóle sensu, bo wczytasz niepoprawne adresy.

Kod: Zaznacz cały

#include <QtCore>

int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);
    QVector<QVector<int> > v;
    QVector<int> sV1;
    QVector<int> sV2;

    sV1 << 0 << 1 << 2;
    sV2 << 3 << 4 << 5;

    v << sV1 << sV2;
    qDebug() << v;

    QByteArray ba;
    QDataStream stream(&ba, QIODevice::ReadWrite);
    stream << v;

    QVector<QVector<int> > v2;

    stream.device()->seek(0);
    stream >> v2;
    qDebug() << v2;
}
[IMG]http://www.ubudsl.com/media/UbuDSL.png[/IMG]
Masz problem z UbuDSL? Nie zapomnij wygenerować i załączyć loga do postu!
bfo
Piegowaty Guziec
Piegowaty Guziec
Posty: 21
Rejestracja: 24 lut 2008, 19:05
Płeć: Mężczyzna
Wersja Ubuntu: 8.10
Środowisko graficzne: GNOME
Kontakt:

Odp: [Qt4] Odczyt QVectora przez QDataStream

Post autor: bfo »

Dziękuję za pomoc. Już działa.
#480909 Registered Happy Linux User
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 6 gości