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:

Code: Alles auswählen

  der Dateien wurden erkannt
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

Code: Alles auswählen

tr("Path %1").arg(number)
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:

Code: Alles auswählen

5 der Dateien wurden kopiert.
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:

Code: Alles auswählen

QString numberAsString = QString::number(5);
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:

Code: Alles auswählen

int integ = 5;
QString string;
string.setNum(integ);
Hier wird ein QString ausgegeben:

Code: Alles auswählen

qDebug() << string;
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;
}