QMessageBox::information mit einem int

Alles rund um die Programmierung mit Qt
Antworten
nkc
Beiträge: 67
Registriert: 3. November 2008 12:01

QMessageBox::information mit einem int

Beitrag 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?
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag 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.
Strahlex
Beiträge: 158
Registriert: 23. Dezember 2008 15:49
Wohnort: Österreich

Beitrag von Strahlex »

QString::number() oder QString::arg() würd ich vorschlagen.
Exasperation
Beiträge: 186
Registriert: 11. März 2009 18:00
Wohnort: VS

Beitrag 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 +
Strahlex
Beiträge: 158
Registriert: 23. Dezember 2008 15:49
Wohnort: Österreich

Beitrag 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
nkc
Beiträge: 67
Registriert: 3. November 2008 12:01

Beitrag 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
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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.
nkc
Beiträge: 67
Registriert: 3. November 2008 12:01

Beitrag 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));
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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;
}
Antworten