Qt, wie zum öffnen einer Datei im aktuellen Verzeichnis ? oder was ist daran falsch?
Ich versuche zum öffnen einer xml-Datei im aktuellen Speicherort der ausführbaren
QString path = QDir::currentPath();
path.append("/acc.xml");
QFile file(path);
if(!file.open(QIODevice::ReadOnly))
{
insertItem("IO ERR");
}
- Wenn ich es aus der Qt creator, funktioniert alles.
currentPath()
gibt den Pfad zu den ausführbaren Ordner - Wenn ich
project-build-desktop/
Ordner und versuchen, es manuell ausführencurrentPath()
zurück/home/user/Documents
BEARBEITEN
habe auch versucht mit dem gleichen Ergebnis:
Qt::current().path();
Qt::current().absolutePath();
Das problem kommt offensichtlich aus dem Pfad des Dokuments.
Was ist der richtige Weg ? Ich habe schon fast 2 Stunden versucht herauszufinden / zu verstehen, Qt
Was ist der richtige Weg ? Ich habe schon fast 2 Stunden versucht herauszufinden / zu verstehen, Qt
InformationsquelleAutor sdadffdfd | 2011-01-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, QCoreApplication::applicationDirPath() anstelle von QDir::currentPath().
Details siehe http://doc.qt.io/qt-5/qcoreapplication.html#applicationDirPath
InformationsquelleAutor Johnny
Überprüfen Sie den Rückgabewert von
QDir::currentPath()
. Ich denke, wenn Sie laufen von Qt Creator, es gibt den Pfad der Projektdatei (*.pro) liegt. Beim ausführen von außen, die Sie bekommen, Weg der binären.Bearbeiten
Ich noch nie mit Linux funktioniert. Sie können jedoch versuchen, andere Funktionen/Kombinationen von
QDir
:etc.
/home/user/Documents
. Aber die ausführbare Datei, die bei mir läuft ist eindeutig nicht da...Ich brauche den Pfad zu dem binary... und das passiert nicht wenn ich es von außen
Bitte überprüfen Sie die Bearbeiten.
gleiche Ergebnisse. Von Qt-Creator - OK, außerhalb NICHT.
auf windows unter Verwendung von Qt in einer Anwendung, jedes mal, wenn die Anwendung gestartet wird, erstellt es ein Verzeichnis (wenn nicht vorhanden) wo die binary vorhanden ist. Ich lasse Sie wissen, wie ich das geschafft habe, wenn ich wieder zu Hause. Soweit ich mich erinnere, ist es QDir::current().mkdir("speichert"). Und es funktionierte mit Qt Creator und außerhalb gleichermaßen.
InformationsquelleAutor Donotalo
Öffnen einer Datei im aktuellen Verzeichnis, rufen Sie einfach QFile Konstruktor
Getestet habe ich diese auf meinem Linux-Rechner und es funktioniert
Ich laufen ./TestQFile und wenn es ein test.xml im aktuellen Verzeichnis, dann funktioniert es.
UPDATE: ich habe bemerkt, dass die Formulierung Ihrer Frage sagt, dass Sie möchten, dass die Datei im gleichen Verzeichnis wie die ausführbare Datei, diese kann getan werden, wie folgt:
UPDATE 2: Unter dem Projekt-panel von QtCreator, gibt es ein Feld für das Arbeitsverzeichnis ein. Dies ist der Ordner, der zurückgegeben wird, durch QDir::currentPath (), wenn Sie es läuft über QtCreator.
Es scheint, dass QtCreator macht irgendeine Art von
magic
beim laufen mein Projekt. Es ist eine GUI-Anwendung, die ich versuche zu entwerfen. Vonoutside
ich in der Regel führen Sie die Anwendung ohne Argumente, nurclick
Versucht zu sehen, wie QtCreator läuft es.. nur:
Starting /home/user/Projects/Project-build-desktop/Project...
Aha, das problem ist, dass wenn Sie klicken Sie auf die Anwendung, es läuft von $HOME. Wenn Sie möchten, führen Sie die Anwendung aus einem bestimmten Verzeichnis, müssen Sie die cd, die das Verzeichnis führen Sie anschließend die ausführbare Datei vollständiger Pfad. QtCreator macht dies automatisch für Sie. Ich schlage vor, Sie versuchen: 1) die Methode, die ich gepostet, um den Speicherort der ausführbaren Datei, 2) lagern Sie den Speicherort, wo die Datei in ein QSettings-Objekt.
wow!!! Werde ich hassen, linux für den rest meines Lebens ! danke.
InformationsquelleAutor Dat Chu
Fand ich diese Diskussion bei der Suche nach einer ähnlichen Lösung. Ich denke, dass die meisten tragbare Weise öffnen einer externen Datei mit einem festen Namen (und keine Dialoge, und der Benutzer beteiligt sind), ist die Verwendung der Ressourcen-System.
In meinem Fall habe ich erstellt eine neue Ressource-Datei mit dem Präfix
/config
Hinzugefügt und die Datei (genanntsettings.xml
). In dem code, ich brauche nicht zu verwenden, eine Pfad-Funktionen. Ich benutze die Ressource-system statt. So einen Anruf wieQFile file(":/config/settings.xml")
funktioniert einwandfrei. Mit QT creator 2.0.1 und QT 4.7 auf Windows.InformationsquelleAutor sakisk