Seite 1 von 1
QMessageBox::information mit einem int
Verfasst: 10. März 2009 16:12
von nkc
Kann mir jemand sagen, warum das Ergebnis nicht korrekt angezeigt wird?
Code: Alles auswählen
int anzahl = 5;
QMessageBox::information(this,tr("Info"), tr(anzahl + " der Dateien wurden erkannt"));
Es gibt keine Fehlermeldung beim kompalieren.
Ausgabe:
Wo bleibt die Zahl 5?
Verfasst: 10. März 2009 16:53
von pfid
http://doc.trolltech.com/4.4/qstring.ht ... ator-2b-15
Wie man eine Zahl zu einem String "addiert" findest du in o.g. Link bestimmt selbst.
Verfasst: 12. März 2009 10:26
von Strahlex
QString::number() oder QString::arg() würd ich vorschlagen.
Verfasst: 12. März 2009 11:21
von Exasperation
Das ist ja lustig... habe ein ähnliches Problem gehabt und erst die heir gefundene Lösung verwendet, dann aber das hier versucht:
Code: Alles auswählen
QString str = "Path ";
str = str + QString::number(path_nr);
Auf diese Weise kannst du z.B. ints an einen String dranhängen... Alternativ würde auch append bzw prepend funktionieren.
Du musst natürlich nicht jedes mal str = str + ... machen, sondern kannst alles gleich aneinanderhängen verbunden durch +
Verfasst: 13. März 2009 10:20
von Strahlex
ist besser 8)
EDIT: lies dir bitte in der Qt Doku QString::arg durch
Verfasst: 13. März 2009 10:59
von nkc
Hallo,
leider werde ich dadurch nicht schlauer.
Ich will doch einfach nur eine zahl von int mit einem String addieren.
Was ist Path?
Als Ergebnis soll z.B. folgendes auf eine MessageBox ausgegeben werden:
5 = zahl vom Typ int
"der Dateien wurden kopiert" = String
Verfasst: 13. März 2009 12:16
von franzf
OK, extra für dich die lange Antwort:
Es gibt keinen
operator+(int, const QString&).
Die nächste Möglichkeit wäre, dass ein Konstruktor
QString(int number) existieren könnte, so dass dieser bei einem
5 + QString("was jetzt?") implizit aufgerufen werden könnte. Diesen Konstruktor gibt es aber auch nicht.
Daher besteht für dich nur die Möglichkeit, aus einem int einen String zu machen, und diesen dann mittels operator+ mit einem anderen QString zu verknüpfen. (wenn du auf die "+"-Version bestehst und nicht mittels arg() arbeiten willst, was in meinen Augen wurscht ist).
Wie das geht wurde in diesem Thread auch schon gesagt:
Aber eigentlich hättest du das selber "erraten" können, wenn du im assistant mal nach number oder arg beim QString gesucht hättest.
Verfasst: 13. März 2009 13:15
von nkc
Ein integer-Wert in ein QString zu casten ist nicht das Porblem.
Das Problem ist, dass es nicht auf der MessageBox ausgegeben wird.
Beispiel:
Hier wird ein QString ausgegeben:
Das geht nicht, obwohl ich ein QString übergbebe:
Code: Alles auswählen
QMessageBox::information(this,tr("Prüfung abgeschlossen"), tr(string));
Verfasst: 13. März 2009 13:32
von franzf
nkc hat geschrieben:Ein integer-Wert in ein QString zu casten ist nicht das Porblem.
Das Problem ist, dass es nicht auf der MessageBox ausgegeben wird.
Das war irgendwie nicht so 100% ersichtlich, dachte es geht darum einen int und nen String mit "+" zu verbinden...
Beispiel:
Code: Alles auswählen
int integ = 5;
QString string;
string.setNum(integ);
QMessageBox::information(this,tr("Prüfung abgeschlossen"), tr(string));
Hast du auch versucht das Beispiel mal zu kompilieren? Das geht sicher nicht! Und du fügst hier auch keinen String und nen int mit "+" zusammen.
(hint: QObject::tr() erwartet einen const char*, nicht nen string, drum wird das auch niemals kompilieren).
Hier ein minimales Beispiel, welches ohne Probleme kompiliert und anzeigt:
Code: Alles auswählen
#include <QtGui>
int main( int argc, char** argv )
{
QApplication app( argc, argv );
QString s = QString::number( 5 );
QMessageBox::information( NULL, QObject::tr("Prüfung abgeschlossen mit"), QObject::tr("Megagenialer, glatter, hoffnungserweckender ") + s );
return 0;
}