QString in const char* wandeln

Alles rund um die Programmierung mit Qt
Antworten
Nightblizard
Beiträge: 39
Registriert: 7. Oktober 2009 20:32

QString in const char* wandeln

Beitrag von Nightblizard »

Hoi,
ich habe ein problem beim casten von QString in const char*. Ich habe bereits einiges gesucht, jedoch nichts gefunden was mir bei meinem Problem weiter geholfen hat.

Folgendes Problem:
Ich schreibe einen LUA Editor und habe eine Funktion geschrieben, die den Text überprüfen und LUA-Ausgaben ausgeben soll. Jedoch kann ich nur die Datei prüfen (bzw. ist mir kein anderer Weg bekannt) und der Dateipfad ist in einem QString gespeichert. Um die Datei prüfen zu können benötige ich jedoch einen const char* Wert.

Ich habe vieles versucht, jedoch läuft beim casten irgend etwas falsch, da ich immer nur die Fehlermeldung erhalte "cannot open <seltsame zeichen> : no such file or directory".

Ich bin bereits jede toXY() Konvertierung durchgegangen, jedoch alles ohne Erfolg!

Gebe ich jedoch den Konvertierten String und den QString aus, sind beide absolut identisch! :S


Ich bin am Ende mit meinem Latein und hoffe jemand hat eine Idee!


Der LUA-Syntax Check:

Code: Alles auswählen

bool MainWindow::CheckSyntax()
{
    d = new Debugger();
    d->Init();
    if(filepath == "" || filepath == NULL || !saved)
    {
        if(!onSave())
        {
            statusBar()->showMessage("Bitte speichern!", 10000);
            return false;
        }
    }

    const char* fl = filepath.toLatin1();

    statusBar()->showMessage(tr("filepath: %1").arg(fl));

    lua_State* l = luaL_newstate();
    luaopen_base(l);
    lua_settop(l, 0);
    if(luaL_dofile(l, fl))
        d->Add(tr("Fehler: %1").arg(lua_tostring(l, -1)));

    return true;
}

Speichern und schreiben des filepathes:

Code: Alles auswählen

bool MainWindow::on_actionSpeichern_activated()
{
    filepath = QFileDialog::getSaveFileName (0, "Speichern unter...", QString(), "*.lua"   );

    QFile file(filepath);
    if (!file.open(QFile::WriteOnly | QFile::Text))
        return false;

    QTextStream out(&file);
    QApplication::setOverrideCursor(Qt::WaitCursor);
    out << edit->toPlainText();
    QApplication::restoreOverrideCursor();

    statusBar()->showMessage(tr("Datei gespeichert"), 2000);
    saved = true;

    QString shownName;
    if (filepath.isEmpty())
        shownName = "untitled.txt";
    else
        shownName = QFileInfo(filepath).fileName();
   setWindowTitle(tr("%1[*]").arg(shownName));

   return true;
}

Ich hoffe ihr findet etwas!


Mfg,
Night
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

toStdString().c_str() ???
Nightblizard
Beiträge: 39
Registriert: 7. Oktober 2009 20:32

Beitrag von Nightblizard »

Schon versucht - gleiches Ergebnis.
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

was ist denn das genau ?

const char* fl = filepath.toLatin1();

filepath ist nen QString oder ?
dann gibt dir toLatin1() ne Kopie auf nen QBytarray zurueck. DIe wiederum kann glaub ich keine impliziete konvertierung zu nem char * ?
Kann der das ueberhaupt kompilieren ?

und wenn das da nen QString ist, kriegst du nen temporaeres object zurueck, das du ja auch brauchst da nen c-string ne andere byteanordnung hat als wie nen qstring (16byte char) .

Also besser QByteArray fl = filepath.toLatin1();

und ueberall wo du fl als const char * verwendet hasst, stattdessen fl.CData() schreiben ....
Ich habe vieles versucht, jedoch läuft beim casten irgend etwas falsch
Genau das scheint auch bissi das verstaendnissproblem zu sein ....
casten geht ned, du musst konvertieren. in deinem Fall konvertieren auf nen eigenen speicher. Das heisst du brauchst immer nen Object was dir deine Zeichenfolge haelt. Ob das nun std::string oder QByteArray ist, egal, du brauchst nur eins.

Ciao ....
Nightblizard
Beiträge: 39
Registriert: 7. Oktober 2009 20:32

Beitrag von Nightblizard »

Aaah, das funktioniert wunderbar!


Vielen dank,
Night
Antworten