Aufruf der Funktion "QVariant data(...)"

Alles rund um die Programmierung mit Qt
Allroad
Beiträge: 61
Registriert: 23. Oktober 2007 10:19
Kontaktdaten:

Beitrag von Allroad »

Ok, das hab ich jetzt auch hingekriegt! Leider hat mein Model/View aber immer noch ein Bug:
Mein Modell besteht aus zwei Listen (eine Pixmap-Liste und eine QPoint-Liste), diese Listen möchte nun in mein TableView anzeigen. Entsprechend hat mein View 2 Spalten und n Zeilen (erste Spalte für die Pixmaps, 2-te für die QPoints).
So werden die Daten in mein Modell eingespeist und gleichzeitig die Spalten bzw. Reihen für den View:

Code: Alles auswählen

void worksheetModel::addModule(QPixmap pixmap, QPoint position)
{    
    
    int row=rowCount();
    int column=columnCount();
    
    if (row!=0) // View nicht-leer, erstelle noch eine Reihe
    
       {
        beginInsertRows(QModelIndex(), row, row);
        pixmapList.insert(row, pixmap);
        positionList.insert(positionList.size(), position);
        endInsertRows();
        }

        else //View ist leer, erstelle 2 Spalten und 1 Reihe
             {
              beginInsertColumns(QModelIndex(), column, column+1); 
              beginInsertRows(QModelIndex(), row, row);
              pixmapList.insert(row, pixmap);
              positionList.insert(positionList.size(), position);
              endInsertRows();
              endInsertColumns();  
              }
}  
d.h. am Anfang werden ein Row und zwei Columns erstellt (else), danach wird jeweils nur noch ein Row hinzugefügt.
Mein Problem: solange mein View nur ein Row und zwei Spalten hat, wird nur ein Item (QModelIndex = QModelIndex(0,0,0x0,worksheetModel(0x8128268) )) aktualisiert, obwohl das View 2 Elemente hat (1Row x 2Column).
Füge ich noch ein Row ein (2Row x 2Column = 4 Items) wird tatsächlich alles aktualisiert QModelIndex = 0,0; =0,1; =1,0; =1,1.
Also, wieso wird mein View nicht richtig aktualisiert wenn ich nur 2 Elemente habe...? ich hoffe das Ganze einigermassen verständlich erklärt zu haben.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Was für ein Model verwendest Du überhaupt? Ich würde QStandardItemModel empfehlen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Allroad
Beiträge: 61
Registriert: 23. Oktober 2007 10:19
Kontaktdaten:

Beitrag von Allroad »

hm... wieso steht mein Beitrag nun 2x da??
@Christian81: Mein Model ist aus QAbstractTableModel abgeleitet...

@Christian81: kannst du bitte den ersten (unvollständigen) Beitrag löschen?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ist gelöscht.

Ich denke Du kommst mit einem QStandardItemModel wesentlich einfacher zum Ziel. QAbstract* bedeutet immer dass man sich um alles und jeden kümmern muss (quasi nur eine Hülle) wohingegen die etwas spezielleren Models sehr viel Arbeit abnehmen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Allroad
Beiträge: 61
Registriert: 23. Oktober 2007 10:19
Kontaktdaten:

Beitrag von Allroad »

Ich schau mir das mal an, mal sehen wie aufwendig das ist alles zu ändern...
Weil mein Model/View prinzipiell funktioniert, wie gesagt bis auf dem kleinen Bug, und damit kann ich wahrscheinlich leben.
Aber danke trotzdem!
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Gib halt bei columnCount() immer 2 zurück, egal ob dein Model jetzt leer ist, oder nicht, event. hilft dies.
Allroad
Beiträge: 61
Registriert: 23. Oktober 2007 10:19
Kontaktdaten:

Beitrag von Allroad »

Genau daran lags... ich hab bei columnCount aus versehen 1 statt 2 ausgegeben! Also danke, aber bescheiden wie ich bin, muss ich gestehen, dass ich schon selber drauf gekommen bin! :lol:
Antworten