Konversion von QStringList zu QList<QStandardItem>

Alles rund um die Programmierung mit Qt
Antworten
Illuminatus
Beiträge: 84
Registriert: 3. Dezember 2008 12:48

Konversion von QStringList zu QList<QStandardItem>

Beitrag von Illuminatus »

Hi
Leute und zwar gehts um folgenden Code:

Code: Alles auswählen

            // List represents a Row
            QStringList elements = text.split(";:");

            // Conversion to QList item
            QList<QStandardItem> itemsList;
            //qDebug() << elements;
            for(int i = 0; i< elements.size(); i++)
            {
                QString string = elements.at(i);
                QStandardItem item(string);
                itemsList.append(item);
            }


Ich bekomme folgende Fehler:

Code: Alles auswählen

/Library/Frameworks/QtGui.framework/Versions/4/Headers/qstandarditemmodel.h:: In member function 'void QList<T>::append(const T&) [with T = QStandardItem]':



/Users/ ... /QT/STC-build-desktop/../STC/src/CSVReader.cpp:38: error:   instantiated from here

/Library/Frameworks/QtGui.framework/Versions/4/Headers/qstandarditemmodel.h:240: error: 'QStandardItem::QStandardItem(const QStandardItem&)' is protected
/Library/Frameworks/QtCore.framework/Headers/qlist.h:478: error: within this context

/Library/Frameworks/QtGui.framework/Versions/4/Headers/qstandarditemmodel.h:: In member function 'void QList<T>::node_construct(QList<T>::Node*, const T&) [with T = QStandardItem]':

/Library/Frameworks/QtCore.framework/Headers/qlist.h:472: error:   instantiated from 'void QList<T>::append(const T&) [with T = QStandardItem]'
...


franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Als Tip für die Zukunft, den du dir unbedingt merken solltest:

Code: Alles auswählen

error: 'QStandardItem::QStandardItem(const QStandardItem&)' is protected 
hat den genialen Hintergedanken, QStandardItem nicht kopierbar zu machen. Du wirst das noch öfters bekommen (versuch mal ein QObject zu kopieren, also keinen Zeiger auf ein QObject).
Die einzige Lösung um solche nicht-kopierbaren Sachen in einen Container (QList, ...) zu stopfen, sind Zeiger, denn per Value werden solche Objekte natürlich immer in den Container kopiert.

Also:
QList<QStandardItem> -> QList<QStandardItem *>

Ein value hat in dem Fall eh wenig Sinn, da QStandardItemModel selber die Items nur per Zeiger entgegennimmt kannst dir viel unangenehme Effekte holen, wenn intern umkopiert werden müsste und dabei die Adresse eines QStandardItems nicht mehr die alte wäre, QStandardItemModel aber noch darauf zugreifen will -> BOOM CRASH ;)
Deshalb ist das Kopieren von QStandardItems wohl auch verboten ;)
Illuminatus
Beiträge: 84
Registriert: 3. Dezember 2008 12:48

Beitrag von Illuminatus »

Genial!!!
Vielen vielen Dank!! ich komm aus der java ecke, deshalb muss ich da no en bissel umdenken
Antworten