QDataWidgetMapper mit mehreren Properties pro Widget

Alles rund um die Programmierung mit Qt
Antworten
Kaini
Beiträge: 1
Registriert: 2. Mai 2010 10:26

QDataWidgetMapper mit mehreren Properties pro Widget

Beitrag von Kaini »

Hallo,
ich habe eine Datenbank in der ein minimal, maximal und aktueller Wert gespeichert ist. Diese drei Eigenschaften möchte ich auf eine QSpinBox übertragen. (minimum, maximum und value)

ich hab folgenden Code:

Code: Alles auswählen

        uniquePropertiesSpin[i] = new QSpinBox;

    uniqueMapper = new QDataWidgetMapper(this);
    uniqueMapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit);
    uniqueMapper->setModel(uniqueItemsModel);
    uniqueMapper->setItemDelegate(new QSqlRelationalDelegate(uniqueMapper));

    for (size_t i = 0; i < DataManager::PropCount; ++i) {
        uniqueMapper->addMapping(uniquePropertiesSpin[i], 23 + i * 4, "minimum");
        uniqueMapper->addMapping(uniquePropertiesSpin[i], 24 + i * 4, "maximum");
    }
Dabei hat sich herausgestellt, das minimum nie gesetzt wird. Das liegt daran, dass ein QDataWidgetMapper pro Widget nur ein einziges Mapping erlaubt. Daher habe ich den Code zu folgendem ausgebessert:

Code: Alles auswählen

        uniquePropertiesSpin[i] = new QSpinBox;

    uniqueMapper = new QDataWidgetMapper(this);
    uniqueMapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit);
    uniqueMapper->setModel(uniqueItemsModel);
    uniqueMapper->setItemDelegate(new QSqlRelationalDelegate(uniqueMapper));

    QDataWidgetMapper *uniqueMapperHelper = new QDataWidgetMapper(this);
    uniqueMapperHelper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit);
    uniqueMapperHelper->setModel(uniqueItemsModel);
    uniqueMapperHelper->setItemDelegate(new QSqlRelationalDelegate(uniqueMapperHelper));
    for (size_t i = 0; i < DataManager::PropCount; ++i) {
        uniqueMapperHelper->addMapping(uniquePropertiesSpin[i], 23 + i * 4, "minimum");
        uniqueMapper->addMapping(uniquePropertiesSpin[i], 24 + i * 4, "maximum");
    }
    connect(uniqueMapper, SIGNAL(currentIndexChanged(int)), uniqueMapperHelper, SLOT(setCurrentIndex(int)));
Ich habe einfach noch einen Mapper erstellt um mein Ziel zu erreichen.

Jetzt möchte ich allerdings noch dazu den aktuellen Wert der QSpinBox aus der Datenbank "reinmappen", dazu müsste ich noch einen QDataWidgetMapper erstellen. Allerdings bin ich mit dieser Lösung sehr unzufrieden.

Ist das ein Feature/Bug im QDataWidgetMapper, dass man pro Widget nur ein einziges Mapping haben kann? So wie es jetzt ist ist der QDataWidgetMapper ziemlich nutzlos, wenn ihr mich fragt. :(
Gibt es für diesen Anwendungsfall andere Klassen? Oder zumindest eine elegante Lösung?
Antworten