Mapping auf ComboBox mit QSortFilterProxyModel

Alles rund um die Programmierung mit Qt
Antworten
Wowbagger
Beiträge: 17
Registriert: 14. Juli 2007 21:12

Mapping auf ComboBox mit QSortFilterProxyModel

Beitrag von Wowbagger »

Hallo,

folgende Ausgangssituation: ich mappe eine Spalte aus einem QSqlRelationalTableModel auf eine ComboBox. Im wesentlichen bin ich wie im SQL Widget Mapper Example beschrieben, vorgegangen:

Code: Alles auswählen

 
    QSqlRelationalTableModel *m_Model;
    mapper = new QDataWidgetMapper(this);
    mapper->setModel(m_Model);

    QSqlTableModel *relModel = m_Model->relationModel(typeIndex);
    projektComboBox->setModel(relModel);
    projektComboBox->setModelColumn(relModel->fieldIndex("projectID");
    mapper->addMapping(projektComboBox, typeIndex);
Funktioniert prima in Zusammenspiel mit QTableView, welches ebenfalls mit m_Model verbunden ist.

Jetzt habe ich als Model für QTableView ein QSortFilterProxyModel verwendet. Das Mapping auf QTextEdit funktioniert damit genauso, aber die ComboBox macht Probleme:

Code: Alles auswählen

 
    QSqlRelationalTableModel *m_Model;
    QSortFilterProxyModel *m_ProxyModel;
    m_ProxyModel->setSourceModel(m_Model);

    mapper = new QDataWidgetMapper(this);
    mapper->setModel(m_ProxyModel);

    QSqlTableModel *relModel = m_Model->relationModel(typeIndex); 
    projektComboBox->setModel(relModel);
    projektComboBox->setModelColumn(relModel->fieldIndex("projectID");
    mapper->addMapping(projektComboBox, typeIndex);
Wenn ich nun in der Tabelle eine Zeile auswähle, wir der richtige Wert in der ComboBox angezeigt. Wenn ich die ComboBox aufklappe, ist auch alles OK. Es werden wie erwartet, alle Einträge aus dem relationModel angezeigt. Wenn ich jedoch einen anderen Eintrag wähle, dann wird dieser in der ComboBox zwar angezeigt, jedoch nicht in der Tabelle geändert.

Was läuft hier falsch? Für Hinweise bin ich dankbar!

Viele Grüße,
Wowbagger
Wowbagger
Beiträge: 17
Registriert: 14. Juli 2007 21:12

Re: Mapping auf ComboBox mit QSortFilterProxyModel

Beitrag von Wowbagger »

Kann mir jemand weiterhelfen?

Ich habe das Problem mal in einem lauffähigen Programm extrahiert.

Wenn man in mainwindow.cpp in Zeile 24 die Kommentarzeichen entfernt, funktioniert es wie es soll. Die Felder werden richtig gemappt und Änderungen angezeigt.

Code: Alles auswählen

   model = m_Model;
Kommentiert man die Zeile aus, wird m_ProxyModel verwendet (Zeile 23)

Code: Alles auswählen

    model = m_ProxyModel;
Jetzt taucht das Problem auf. Zwar wird alles richtig angezeigt und wenn ich Änderungen im Textfeld mache, werden die auch in der Tabelle angezeigt (zumindest, wenn ich das Textfeld verlasse). Änderungen in der ComboBox werden jedoch nicht übernommen.

Woran liegt das?
Dateianhänge
modelproblem.zip
Beispielprogramm komplett
(4.5 KiB) 245-mal heruntergeladen
Antworten