2014-07-25 19 views
6

Próbuję odczytać plik i umieścić go w edytorze tekstu i ciągle mówi QIODevice :: read: device not open. Plik .txt znajduje się w tej samej lokalizacji, co mój plik .qrc i .cpp. Śledziłem krok po kroku z internetu. Z mojego zrozumienia zmieniły coś, gdy przeszły z Q4 na Q5. Czy ktoś ma jakąkolwiek wskazówkę, jak mogę to naprawić. DziękiQIODevice :: read: device not open

//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

Czy możemy zobaczyć kod? Jeśli muszę zgadywać, nie otwierasz poprawnie pliku. Jeśli czytasz tylko z pliku, dlaczego nie używasz klasy 'QFile', czy po prostu używasz' fstream.h'? Dodatkowo, jeśli używasz Qt, plik .txt musi znajdować się w katalogu budowania, a nie w katalogu źródłowym (zakładając, że nie zmienisz katalogu roboczego). Jeśli użyjesz ustawień domyślnych, będzie to folder o nazwie 'build -% {CurrentProject: Name} -% {CurrentKit: FileSystemName} -% {CurrentBuild: Name}' – Lighthat

+0

To nie pozwoli mi umieścić właściwej składni // My findstuff.h #ifndef FINDSTUFF_H #define FINDSTUFF_H #include Ui {class FindStuff; class klasy FindStuff: public QWidget {Q_OBJECTpublic: explicit FindStuff (QWidget * parent = 0); ~ FindStuff(); prywatne sloty: void on_goButton_clicked(); private: Ui :: FindStuff * ui; void getTextFile();}; – user3878223

+0

Kod, który nam podałeś, nie pomaga, musimy zobaczyć, jak używasz 'open()' – Lighthat

Odpowiedz

2

Nie jesteś minięciu absolutną ścieżkę pliku do QFile::open(), a ty nie jesteś sprawdzając wynik otwierania pliku. W twoim przypadku jest to niepowodzenie i open() zwraca wartość false, ale ignorujesz to, zamiast naprawiać problem (złą ścieżkę), który go spowodował.

Ma to związek z Qt 4 -> Qt 5 upgrade i wszystko, co należy zrobić, zakładając niewłaściwą rzecz w bieżącym katalogu, w którym znajduje się aplikacja. Ogólnie rzecz biorąc, bieżący katalog (lub katalog roboczy) jest arbitralny, specyficzny dla platformy i okoliczności oraz całkowicie poza twoją kontrolą. Jeśli użytkownik nie poda ci nazwy pliku, która jest niejawnie powiązana z bieżącym katalogiem roboczym (np. Jako ścieżka względna z podanym argumentem wiersza poleceń), musisz użyć bezwzględnych ścieżek do plików lub rzeczy po prostu nie będą działać.

+0

Na tutorze, który oglądałem, działało idealnie. Naprawiłem to. Dzięki za wkład. – user3878223

+0

@ user3878223 Nie działało idealnie ". To zadziałało, ponieważ wywołałeś samouczek w określony sposób, który sprawiał wrażenie, jakby działał. –

+1

Pobrałem Q4, aby sprawdzić, czy to zadziała. Tak było. Jest coś, co zmieniło się z Q4 na Q5. Nie miałeś racji. Ale dziękuję. – user3878223

7

Jeśli czytasz z pliku zasobów .qrc, musisz uruchomić qmake ("Build-> Run qmake" w Qt Creator), zanim będzie on dostępny.

0

Może to być związane z wersją Qt, ponieważ Qt5 czasami nie działa z MSVC2010. Mam Qt 5.4 i mój kod dał ten sam błąd, gdy pracował z MSVC2010 OpenGL jako kompilator. Ręcznie dodałem MinGW 32bit, aby użyć go jako kompilatora i zadziałało. P.S. Nie zainstalowałem MSVC2013 dla Qt 5.4. I działa czasami z OpenGL MSVC2010 bez błędu, ale nie w tym przypadku.

0

Miałem ten problem i okazało się, że Qt Creator w rzeczywistości nie dodał pliku .qrc do mojego projektu. Używam programu Qt Creator 4.1.0 na komputerze Mac, a widok projektów nie zawsze jest zapełniany po utworzeniu nowego projektu, co wymaga ponownego uruchomienia Kreatora. Moja wersja tego problemu może się z tym wiązać.

Powiązane problemy