QDataWidgetMapper - frissítés

 ( kagy | 2010. március 17., szerda - 12:37 )

Üdv!

Van egy érdekes frissítés problémám a Qt, QDataWidgetMapper osztályával kapcsolatban, hátha van valakinek ötlete hogyan lehetne megoldani, illetve mi a gond.

Van egy QSqlTableModel (ami egy SQL adatbázisból hoz le egy táblázat adatait)
QDataWidgetMapper -el összekötöm a model egyes mezőit, a képernyőn látható widget-ekkel amit majd e felhasználó módosít ha akar.
Ugyan ezen a képernyőn van egy olyan funkció ami azt a rekordot módosítja amit épp lát a felhasználó, de ezt nem a mapperen hanem közvetlenül QSqlQuery-n keresztül teszem, miután ez a kód lefut hívok egy QSqlTableModel select -et hogy frissüljenek az adataim, ami a modelben le is frissíti, de a mapper-en keresztül hozzákötött widget-ekben nem frissül.
Mi lehet az oka / hol hibás az elképzelésem ?

Előre is köszi a segítséget, javaslatot!

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Mivel a tarolas nem a mapperen keresztul megy, nem lehet, hogy a mappernek is szolni kene, hogy: he ocsi, frissultek az adatok am! Mert igy nem tudja. Egyebkent a QSqlQuery ugyanaz az objektum, mint amin a QSqlTableModel is alapszik, vagy ez egy masik objektum? Kene latni nemi kodot ahhoz, hogy segiteni tudjunk.
--

()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

hrgy84: Mivel a tarolas nem a mapperen keresztul megy, nem lehet, hogy a mappernek is szolni kene, hogy: he ocsi, frissultek az adatok am!

Na ez az, ezt nem tudom hogyan kell csinálni.

Egyebkent a QSqlQuery ugyanaz az objektum, mint amin a QSqlTableModel is alapszik, vagy ez egy masik objektum?
Nem értem a kérdésed.

Magyarázat hogyan is oldottam meg:
Létrehozok egy formot, melyen létrehozok egy modelt (QSqlTableModel -t), amit megjelenítek a QTableView -en keresztül.
Ezen az ablakon egy elemet kiválaszt a felhasználó szerkesztésre, amire létrehozok egy újabb formot (szerkesztő ablak) melynek átadom a modelt, és a kiválasztott elem indexét.
Összekötöm mapper-en keresztül a model "mezőit" a adatbeviteli mezőkkel, melyből egy csak olvasható (m_ui->leReadOnly) :

void NewModify::setModel(QSqlTableModel *lModel, const QModelIndex & lIndex){
    mapper = new QDataWidgetMapper;
    model = lModel;
    mapper->setModel(model);
    mapper->addMapping(m_ui->leNev, 0);
    mapper->addMapping(m_ui->leReadOnly, 1);
    ...
    ...
    ...
    mapper->setCurrentIndex(lIndex.row());

    }

A szerkesztő formon van egy gomb amit ha megnyom a felhasználó le fut szímítás, amit egy sql query update-vel bejegyzi az adott rekord adatai közzé, ezt az új adatott, ami már az adatbázisban ott van, szeretném ha frissülne a képernyőn a mezőhöz kapcsolt elemben (m_ui->leReadOnly).

Azzal próbálkoztam hogy miután a lefutott az update sql query hívtam egy model->select() -et de ez nem elég, a modelben már jó érték van de a m_ui->leReadOnly -ban továbbra is a régi.

A kérdés alapvetően az hogy hogyan tudom a mapperen keresztül frissítésre bírni a képernyőn látható adatokat?

Most nincs kedvem megnyitni megint az api dokumentaciot, inkabb kerdezek: nincs lehetoseg arra, hogy a QSqlDataMapper altal hasznalt query ojjektumot kerd el es hasznald? Mert lehet, hogy az rendesen be van triggerelve a mapperhez.
--

()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Köszi a tippet!

Sikerült megoldani, a probléma az volt hogy miután a model-t, újra le select-áltam, a mappert újra rá kell állítani a kiválasztott rekordra a setCurrentIndex segítségével.