Probleme bei QString::toStdString

Alles rund um die Programmierung mit Qt
JoseMan
Beiträge: 121
Registriert: 4. März 2009 18:09

Probleme bei QString::toStdString

Beitrag von JoseMan »

Hallo nochmal liebe Community.

Habe noch ein Problem. Irgendwas stimmt nicht bei mir. Folgender Code:

Code: Alles auswählen

	
QStringList strList = QFileDialog::getOpenFileNames(this, tr("Select a input file."), QString("D:"), tr("Files (*.*)"));	
			
QString test(strList.at(0));
std::string test2(test.toStdString());   //  hier kommt nix raus, oder nur unsinn!
So, ich hoffe der Code ist selbsterklärend.
Meine "test2"-Variable beinhaltet nur Mist!
Ich muss es aber so machen, da mein weiterer Programmfluss das benötigt.
Vorher, ich habe gegen Qt statisch gelinkt, mit "QtCore.lib" und "QtGui.lib", ging es noch schön!
Jetzt, ich linke Qt dynamisch, und verwende die "QtCore4.lib" und "QtGui4.lib", funktioniert das nicht mehr richtig.

Hat jemand eine Ahnung woran das liegen könnte?
Hat jemand eine Idee wie ich das beheben könnte?

Thx + Ciao

[Edit]
Ich verwende Unicode Zeichensatz.
[/Edit]
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

Mhhh was mit toStdWString()?

BTW der Code ist gefährlich.... Was ist wenn keine Datei ausgewählt wurde bzw Abbrechen gedrückt wurde
Und warum net getopenFilename wenn du eh nur auf einen Eintrag zugreifst?
Zuletzt geändert von AuE am 16. September 2009 10:26, insgesamt 1-mal geändert.
JoseMan
Beiträge: 121
Registriert: 4. März 2009 18:09

Beitrag von JoseMan »

AuE hat geschrieben:Mhhh was mit toStdWString()?
Kommt folgender Fehler:
VS2005 hat geschrieben: Fehler 1 error C2664: 'std::basic_string<_Elem,_Traits,_Ax>::basic_string(const std::allocator<_Ty> &)': Konvertierung des Parameters 1 von 'QStdWString' in 'const std::allocator<_Ty> &' nicht möglich d:\JochensProjects\trunk\PlanarView\PlanarViewQt\PlanarView\ImportDialog.cpp 68
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

Code: Alles auswählen

    QString x = QFileDialog::getOpenFileName(this, "Choose");

    std::string stdX = std::string(x.toStdString() );

    qDebug() << "String original:" << x << "as std::string:"<<stdX.c_str();
liefert:
String original: "/home/myname/asdasdasd/moc_mainwindow.o" as std::string: /home/myname/asdasdasd/moc_mainwindow.o
JoseMan
Beiträge: 121
Registriert: 4. März 2009 18:09

Beitrag von JoseMan »

AuE hat geschrieben:

Code: Alles auswählen

    QString x = QFileDialog::getOpenFileName(this, "Choose");

    std::string stdX = std::string(x.toStdString() );

    qDebug() << "String original:" << x << "as std::string:"<<stdX.c_str();
.....
Da kommt ein schwerer Fehler.
Ich habe die Fehlerausgabe mal an den Post gehängt!
Dateianhänge
Error_1.jpg
Error_1.jpg (146.99 KiB) 6386 mal betrachtet
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

wo genau raucht er ab?
JoseMan
Beiträge: 121
Registriert: 4. März 2009 18:09

Beitrag von JoseMan »

AuE hat geschrieben:wo genau raucht er ab?

Code: Alles auswählen

			
QString test(strList.at(ii));
std::string test2= std::string(test.toStdString()); // <-- hier... (???)
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Es gibt 2 Möglichkeiten

1. Der zurückgegebene String ist leer (also keine Datei ausgewählt)
2. Das Projekt wurde nicht mit qmake erzeugt und deshalb ist /Zc:wchar_t aktiv, Qt wird aber defaultmässig ohne diesen Schalter gebaut (jetzt mal wieder mein Kommentar - wenn man es schon von Hand machen muss sollte man auch wissen was man tut)

Des weiteren - warum überhaupt std::string? Sobald ein Sonderzeichen drin ist ist der string pfutsch (wstring würde gehen, aber auch hier - für was wenn nicht gerade eine andere Library ein (w)string benötigt)
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
JoseMan
Beiträge: 121
Registriert: 4. März 2009 18:09

Beitrag von JoseMan »

Christian81 hat geschrieben:Es gibt 2 Möglichkeiten

1. Der zurückgegebene String ist leer (also keine Datei ausgewählt)
2. Das Projekt wurde nicht mit qmake erzeugt und deshalb ist /Zc:wchar_t aktiv, Qt wird aber defaultmässig ohne diesen Schalter gebaut (jetzt mal wieder mein Kommentar - wenn man es schon von Hand machen muss sollte man auch wissen was man tut)

Des weiteren - warum überhaupt std::string? Sobald ein Sonderzeichen drin ist ist der string pfutsch (wstring würde gehen, aber auch hier - für was wenn nicht gerade eine andere Library ein (w)string benötigt)
Also gut. Der zurückgegebene String ist nicht leer! Das ist sicher.
nachdem ich Qt installiert/erstellt habe, konnte ich in meinem VS-Studio einfach sagen: "neues Qt-Projekt" und fertig.
Und wenn ich wstring benutze, dann kommt folgender Link-Fehler:
Fehler 2 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > __thiscall QString::toStdWString(void)const " (__imp_?toStdWString@QString@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@XZ)" in Funktion ""private: void __thiscall ImportDialog::openInputfile(void)" (?openInputfile@ImportDialog@@AAEXXZ)". ImportDialog.obj
Wie kann ich denn nun im nachhinein diese Schalter für Qt einstellen?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ich würde sagen - in den Eigenschaften des Projektes/der Bibliothek... benutzt Du die IDE oder ich?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
JoseMan
Beiträge: 121
Registriert: 4. März 2009 18:09

Beitrag von JoseMan »

Christian81 hat geschrieben:Ich würde sagen - in den Eigenschaften des Projektes/der Bibliothek... benutzt Du die IDE oder ich?
Ich kann nicht viel in Qt-Projekteinstellung über die IDE regeln.
Siehe Anhang.

Hilfreich wäre wenn ich mal von Dir, wenn Du schon weist was der Fehler ist, konkrete Lösungsvorschläge bekommen würde. Um ehrlich zu sein, kann ich mit deinen Doppeldeutigen/Ironischen Antworten nicht wirklich viel anfangen.
Ich weis nicht wie das hier läuft, aber in den Foren in den ich so bin, da wird meist auf Fragen/Hilfegesuche produktiv reagiert, außer es hat keinen Sinn. Aber ist das bei mir der Fall?
Dateianhänge
Qt_Einstellung1.JPG
Qt_Einstellung1.JPG (28.42 KiB) 6369 mal betrachtet
Qt_Einstellung2.JPG
Qt_Einstellung2.JPG (23.71 KiB) 6369 mal betrachtet
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Lösungsvorschlag: 'google.de -> /Zc:wchar_t, ersten Link anklicken und Lesen'
Ist das zu viel verlangt?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
JoseMan
Beiträge: 121
Registriert: 4. März 2009 18:09

Beitrag von JoseMan »

So, ich habe jetzt diese Eigenschaft von "wchar_t als built-in Typ behandeln." auf "Ja" gesetzt, aber ohne Veränderung!
D.h. er SCHMIERT IMMER NOCH AB!!!!!
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Funktioniert ein

Code: Alles auswählen

  QByteArray tmp = test.toLocal8Bit();
  std::string test2 = std::string(tmp.constData())
?
Wenn ja liegts an der besagten Option.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
JoseMan
Beiträge: 121
Registriert: 4. März 2009 18:09

Beitrag von JoseMan »

Jupp, das funktioniert.

Ich habe es jetzt auch erstmal über ein QString::toAscii(), und dann von einem QByteArray mit QByteArray::data() gemacht. Fuktioniert auch, muss aber die ganzen Codestellen umschreiben. Und es wird halt nur 8-Bit Zeichensätze verwendet!!

Es liegt also an der besagten Option.... (wchat_t..). das habe ich doch schon an.
Sorry, aber verstehe ich das nicht!!!
Antworten