Qt/C++/SQLite String in Integer umwandeln und anzeigen - was mache ich falsch?
-
void MainWindow::CmdIdClicked() { ui->LstId->clear(); sqlBefehl.exec("SELECT id FROM energie"); FehlerAnzeige(); Id(1); } void MainWindow::Id(int einFeld) { QString id; //------------letzte Id auslesen while(sqlBefehl.next()) { id = ""; for(int i=0; i<einFeld; i++) id += sqlBefehl.value(i).toString(); } ui->LstId->addItem(id);//-----letzte Id wird als String angezeigt int letzteId = id.toInt(); int neueId; neueId = letzteId++; ui->EdtEingabeId->addItem(neueId); /*QString str = "10"; //--- Beispiel für Umwandlung in Str -> Int int n = str.toInt();*/ /*QString id; //----------alle Ids auslesen while(sqlBefehl.next()) { id = ""; for(int i=0; i<einFeld; i++) id += sqlBefehl.value(i).toString() + " # "; ui->LstId->addItem(id); }*/ //----------------alle Ids werden als String angezeigt }
Bis Zeile 20 funktioniert alles.
Nur hilft mir ein String nicht weiter, denn ich möchte die letzte Id +1 als neue Id für den nächsten Datensatz vortragen.Für Zeile 25 erhalte ich im Editor folgende Fehlermeldung:
no member named 'addItem' in 'QLineEdit'Ich verstehe das nicht, die anderen addItems funktionieren ja auch.
Wenn ich Zeile 25 wie folgt ändere:
ui->LstId->addItem(neueId);
erhalte ich die Fehlermeldung:
no matching member function for call to 'addItem'- mein Gedanke war, dass ich in ein Edit-Element vielleicht auf die Art nix eintragen kann....
- aber das scheint ja nicht das Problem zu sein...
Kommentiere ich nun die nicht funktionierende Anzeige aus:
int letzteId = id.toInt(); int neueId; neueId = letzteId++; //ui->EdtEingabeId->addItem(neueId);
erhalten ich für Zeile 2 die Warnung:
variable 'neueId' set but not usedund für Zeile 3 die Warnung:
value stored to 'neueId' during its initialization is never read [clang-analyzer-dead.code.DeadStore]Danke schonmal.
Viele Grüße Claudia
-
Im Ausgabebereich bekomme ich dies angezeigt:
C:\Users\clste\Desktop\_CPP\MeinProjekt\DatenbankSQLite\mainwindow.cpp:175: Fehler: invalid conversion from 'int' to 'QListWidgetItem*' [-fpermissive] ..\DatenbankSQLite\mainwindow.cpp: In member function 'void MainWindow::Id(int)': ..\DatenbankSQLite\mainwindow.cpp:175:28: error: invalid conversion from 'int' to 'QListWidgetItem*' [-fpermissive] 175 | ui->LstIdNeu->addItem(neueId); | ^~~~~~ | | | int
Soll das heißen, dass ich keine Integers anzeigen kann????
-
Jetzt läufts
void MainWindow::Id(int einFeld) { QString id; //------------letzte Id auslesen while(sqlBefehl.next()) { id = ""; for(int i=0; i<einFeld; i++) id += sqlBefehl.value(i).toString(); } ui->LstId->addItem(id);//-----letzte Id wird als String angezeigt int letzteId = id.toInt(); int neueId; neueId = letzteId+1; QString StrNeueId = QString::number(neueId); ui->LstNeueId->addItem(StrNeueId); }
-
Du mußt die Zahl erst in einen String umwandeln, z.B.
ui->EdtEingabeId->addItem(QString::number(neueId));
Jedoch macht es so keinen Sinn, erst die Id beim Einlesen in einen String zu verwandeln, und daraus dann wieder die Zahl zurück zu konvertieren.
Warum überhaupt die komische
for
-Schleife?int id = sqlBefehl.value(0); ui->LstId->addItem(QString::number(id));
Und wenn du nur die höchste Id ermitteln willst, dann einfach
SELECT max(id) FROM energie
und du kannst auf die Leseschleife verzichten:
int id = 0; if (sqlBefehl.next()) id = sqlBefehl.value(0);
Warum möchtest du überhaupt die nächste Id anzeigen? Üblicherweise sollte die Datenbank die Ids vergeben (Stichwort: auto increment column).
Edit: Ok, da haben sich unsere letzten Beiträge überschnitten - beachte trotzdem meine Hinweise! : -)
-
@Th69 sagte in Qt/C++/SQLite String in Integer umwandeln und anzeigen - was mache ich falsch?:
Edit: Ok, da haben sich unsere letzten Beiträge überschnitten - beachte trotzdem meine Hinweise! : -)
Ja, danke
-
Hast du in deinem letzten Beitrag (aus Versehen) 2x denselben Code kopiert oder wolltest du irgendetwas anderes damit ausdrücken?
-
@Th69
Sorry, habe die Dopplung entfernt.