2014-07-25 7 views
6

Ich versuche aus einer Datei zu lesen und in den Text zu editieren und es sagt immer QIODevice :: lesen: Gerät nicht geöffnet. Die TXT-Datei befindet sich am selben Speicherort wie meine .qrc- und .cpp-Datei. Ich folgte einer Schritt für Schritt Anleitung aus dem Internet. Nach meinem Verständnis änderten sie etwas, als sie von Q4 nach Q5 gingen. Hat jemand einen Hinweis darauf, wie ich das beheben kann? DankQIODevice :: lesen: Gerät nicht geöffnet

//My findstuff.h 
#ifndef FINDSTUFF_H 
#define FINDSTUFF_H 
#include <QWidget> 
namespace Ui {class FindStuff;} 

class FindStuff : public QWidget{ 
Q_OBJECT 
public: 
    explicit FindStuff(QWidget *parent = 0); 
    ~FindStuff(); 

private slots: 
    void on_goButton_clicked(); 

private: 
    Ui::FindStuff *ui; 
    void getTextFile(); 
}; 
+3

Können wir Code sehen? Wenn ich raten musste, öffne ich die Datei nicht richtig. Wenn Sie gerade von einer Datei lesen, warum verwenden Sie nicht die Klasse 'QFile' oder einfach nur' fstream.h'? Wenn Sie Qt verwenden, muss sich die .txt-Datei außerdem im Build-Verzeichnis und nicht im Quellverzeichnis befinden (vorausgesetzt, Sie ändern das Arbeitsverzeichnis nicht). Wenn Sie die Standardeinstellungen verwenden, wird es in einem Ordner mit dem Namen 'Build -% {CurrentProject: Name} -% {CurrentKit: FileSystemName} -% {CurrentBuild: Name}' – Lighthat

+0

Es wird nicht lassen Sie mich in die richtige Syntax // Mein findstuff.h #ifndef FINDSTUFF_H #define FINDSTUFF_H #include Namespace Ui {Klasse FindStuff;} Klasse FindStuff: public QWidget {Q_OBJECTpublic: explizite FindStuff (QWidget * parent = 0); ~ FindStuff(); Private Slots: void on_goButton_clicked(); private: Ui :: FindStuff * ui; void getTextFile();}; – user3878223

+0

Der Code, den du uns gegeben hast, hilft nicht, wir müssen sehen, wie du 'open()' – Lighthat

Antwort

2

Sie sind nicht das Bestehen der absolute Pfad der Datei zu QFile::open(), und Sie sind nicht das Ergebnis Öffnen der Datei zu überprüfen. In Ihrem Fall ist es ein Fehler und open() gibt false zurück, aber Sie ignorieren es, anstatt das Problem (den falschen Pfad) zu beheben, der es verursacht hat.

Das hat mit Qt 4 -> Qt 5 Upgrade zu tun, und alles, was mit Ihnen zu tun, unter Annahme der falschen Sache über das aktuelle Verzeichnis, in dem sich Ihre Anwendung befindet. Im Allgemeinen ist das aktuelle Verzeichnis (oder das Arbeitsverzeichnis) willkürlich und plattform- und umgebungsspezifisch und ganz außerhalb Ihrer Kontrolle. Wenn der Benutzer Ihnen keinen Dateinamen gibt, der implizit auf das aktuelle Arbeitsverzeichnis verweist (z. B. als relativer Pfad bei einem Befehlszeilenargument), müssen Sie absolute Dateipfade verwenden oder Dinge funktionieren einfach nicht.

+0

verwendest. Auf dem Tuttorial habe ich gesehen, dass es vollkommen in Ordnung war. Ich habe es repariert. Danke für deinen Beitrag. – user3878223

+0

@ user3878223 Es hat nicht "perfekt funktioniert". Es hat funktioniert, weil Sie das Tutorial auf eine bestimmte Art und Weise aufgerufen haben, die es scheinbar funktionierte. –

+1

Ich habe Q4 heruntergeladen, um zu sehen, ob es funktioniert. Es tat es. Also hat sich etwas von Q4 zu Q5 geändert. Du hattest Unrecht. Aber danke. – user3878223

7

Wenn Sie von einer .qrc-Ressourcendatei lesen, müssen Sie qmake ("Build-> Run qmake" in Qt Creator) ausführen, bevor es verfügbar ist.

0

Es kann mit der Version von Qt verwandt werden, da Qt5 manchmal nicht mit MSVC2010 funktioniert. Ich habe Qt 5.4 und mein Code gab den gleichen Fehler, wenn es mit MSVC2010 OpenGL als Compiler arbeitete. Ich habe MinGW 32bit manuell hinzugefügt, um es als Compiler zu verwenden, und es hat funktioniert. P.S. Ich habe MSVC2013 für Qt 5.4 nicht installiert, und es funktioniert manchmal mit MSVC2010 OpenGL ohne Fehler, aber nicht in diesem Fall.

0

Ich hatte dieses Problem und es stellte sich heraus, dass Qt Creator die .qrc-Datei nicht wirklich zu meinem Projekt hinzugefügt hatte. Ich verwende Qt Creator 4.1.0 auf einem Mac und die Projektansicht wird nach dem Erstellen eines neuen Projekts nicht immer ausgefüllt, da zunächst ein Neustart von Creator erforderlich ist. Meine Version dieses Problems kann sich darauf beziehen.