Portál AbcLinuxu, 10. května 2025 03:02

Dotaz: QT4 tableView removerow

23.4.2012 11:05 mmartin
QT4 tableView removerow
Přečteno: 164×
Odpovědět | Admin

Ahoj,

trochu se potykam s problemem removerow v tableView.

 

Napsal jsem jednoduchou funkci, ktera zjisti aktualni radek a ten se pokusi smazat.

int row = ui->mainTable->currentIndex().row();

mainModel->removeRow(0);

 

Insertovani noveho radku do modelu provadim takto:

mainModel->record()

r.setValue("date", "2012-04-22");

...

mainModel->insertRecord(-1, r);

 

Problem ale je, ze maze vice radku nez ma. Podotykam ze tableview je nastaveny tak, aby neumoznoval vyber vice nez jednoho zaznamu.

 

Data ukladam do SQLite. Uvadim to tu proto, protoze se zda s mym problemem nejak souvisi.

 

Spustim aplikaci a do SQLite db nasazim 10 radku. Ukoncim aplikaci. Spustim aplikaci podruhe, nasazim do ni dalsich 5 radku (tedy celkem 15). Pokud se pokusim smazat jeden s tech 5ti poslednich radku. smazou se mi vsechny naraz. A to jak z tableView tak samozrejme z DB.

 

Netrkne vas neco co delam spatne? Neresili uz jste to nekdo? Nejaky commit do db? commit modelu atp?

 

Diky predem za jakykoliv napad.

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

23.4.2012 21:24 mmartin
Rozbalit Rozbalit vše Re: QT4 tableView removerow
Odpovědět | | Sbalit | Link | Blokovat | Admin

jen jeste opravuju jeden omyl. samozrejme ze tam patri

mainModel->removeRow(row);

23.4.2012 22:36 mmartin
Rozbalit Rozbalit vše Re: QT4 tableView removerow - vyreseno

Takze jak jsem predpokladal. Omyl na me strane.

 

QSqlTableModel::OnFieldChange = All changes to the model will be applied immediately to the database.

QSqlTableModel::OnRowChange = Changes to a row will be applied when the user selects a different row.

QSqlTableModel::OnManualSubmit = All changes will be cached in the model until either submitAll() or revertAll is called.

 

Muj problem byl v kombinaci spatne editstrategy a k tomu spatneho comitu.

 

Tedy model jsem musel nastavit

mainModel->setEditStrategy(QSqlTableModel::OnFieldChange);

 

A na konci kazdeho smazani pak zavolat

mainModel->submitAll();

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.