QT4: QString in const char* umwandeln

Alles rund um die Programmierung mit Qt
Antworten
Xander77
Beiträge: 35
Registriert: 14. Dezember 2006 13:47

QT4: QString in const char* umwandeln

Beitrag von Xander77 »

Hallo,

ich möchte ein QString-Objekt als const char* auslesen. Wenn ich toAscii() verwende, steht in meiner Variable nur Schrott und wenn ich den Umweg über std::string mit toStdString() gehe, stürzt das Programm beim destruieren des std::string-Objektes ab!

Mache ich da etwas falsch?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QT4: QString in const char* umwandeln

Beitrag von Christian81 »

Xander77 hat geschrieben:Mache ich da etwas falsch?
Du liest keine DOKU. Dort würde man nämlich sehen dass toAscii() mitnichten const char* zurückliefert sondern QByteArray.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Xander77
Beiträge: 35
Registriert: 14. Dezember 2006 13:47

Doch, hab ich gelesen!

Beitrag von Xander77 »

Hab natürlich ein QByteArray gehabt und wollte aus dem dann ein char-Array machen. Aber das ist meiner Meinung nach schon ziehmlich unpraktisch. Eigentlich müsste man ja mit toStdString() ein std::string-Objekt bekommen, aus dem man dann einfach mit c_str() ein const char* machen kann. Im Prinzip funktioniert das auch, aber ich habe den Verdacht, dass da in QT ein Fehler ist!

Sobald ich irgendwo toStdString() aufrufe, stürzt am Ende des Gültigkeitsbereichs der Variable das Programm mit folgender Fehlermeldung ab:

HEAP[PrintSimu.exe]: Invalid Address specified to RtlValidateHeap( 01090000, 016B47C8 )

Laut Kontext passiert das beim delete von std::basic_string!
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

QString:toAscii().data() ist also umständlicher als QString::toStdString().c_str(). Wow. Zumal beides die Codierung wegschmeisst und nur für Debug-Zwecke benutzbar ist.

Dein Programm stürzt ab da Du, wie im anderen Thread von mir schon angemerkt, nicht qmake benutzt. Deshalb benutzt Du die falschen Libs im Debug-Modus. Dort muss nämlich QtCored4.lib anstatt QtCore4.lib gelinkt werden. Analog dazu die anderen Qt-Libs
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Xander77
Beiträge: 35
Registriert: 14. Dezember 2006 13:47

Was heißt nur zu Debug-Zwecken benutzbar???

Beitrag von Xander77 »

Man wird doch wohl aus einem QString einen char* oder ein std::string machen können! Das ging ja früher (QT 3.3.4) auch!!!
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Was heißt nur zu Debug-Zwecken benutzbar???

Beitrag von Christian81 »

Xander77 hat geschrieben:Man wird doch wohl aus einem QString einen char* oder ein std::string machen können!
Habe ich irgendwas Gegenteiliges behauptet? Steht doch alles da...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Xander77
Beiträge: 35
Registriert: 14. Dezember 2006 13:47

Übrigens...

Beitrag von Xander77 »

...ich habe die Bibliotheken entsprechend geändert, aber das Programm stürzt immernoch mit der gleichen Meldung ab!!! :?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Nimm qmake oder sonst einen ordentlichen Makefile-Generator damit wir Fehler in den VCProj-Einstellungen ausschliessen können.
Hast du auch /MDd anstatt /MD als Compilerflag benutzt, neu kompiliert und gelinkt? Und hast Du es mal mit toAscii().data() ausprobiert? Ein kleines Besipiel wäre auch nicht schlecht.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Xander77
Beiträge: 35
Registriert: 14. Dezember 2006 13:47

Jetzt hat's geklappt!

Beitrag von Xander77 »

Ich hatte eine Bibliothek vergessen! Danke für Deine Geduld! :)
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Jetzt hat's geklappt!

Beitrag von Christian81 »

Xander77 hat geschrieben:Danke für Deine Geduld! :)
Hast sie arg strapaziert... :lol:

btw: Am Anfang fand ich die neue toAscii() - Funktion auch nicht so prickelnd. Aber wenn man es sich genau überlegt, ist es so wesentlich besser. Wie gesagt - toAscii() und toStdString() kann man eh nur zum debuggen benutzen (und da gibts dann imho auch qout & qDebug()) da bei dieser Umwandlung unweigerlich die Kodierung verloren geht.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Xander77
Beiträge: 35
Registriert: 14. Dezember 2006 13:47

Wie machst Du das dann sonst?

Beitrag von Xander77 »

Wie kriegst Du denn dann einen char* oder std::string aus einem QString-Objekt (nicht zum Debuggen)?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Wie machst Du das dann sonst?

Beitrag von Christian81 »

Xander77 hat geschrieben:Wie kriegst Du denn dann einen char* oder std::string aus einem QString-Objekt (nicht zum Debuggen)?
Wie ich oben schon sagte - toAscii().data() - also noch ein .data() anhängen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Xander77
Beiträge: 35
Registriert: 14. Dezember 2006 13:47

Danke!

Beitrag von Xander77 »

Naja, ich werd mich wohl erst noch an die Neuerungen in QT4 gewöhnen müssen! :)

Also, danke nochmals!
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ach ja, es gibt auch noch qPrintable() - ist ein Wrapper für .toAscii().data().
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten