2014-07-25 14 views
6

Tôi đang cố gắng đọc từ một tệp và được đưa vào chỉnh sửa văn bản và nó tiếp tục nói rằng QIODevice :: read: device not open. Tệp .txt ở cùng vị trí với tệp .qrc và .cpp của tôi. Tôi đã làm theo hướng dẫn từng bước từ trực tuyến. Từ sự hiểu biết của tôi, họ đã thay đổi một cái gì đó khi họ đi từ Q4 đến Q5. Có ai có bất kỳ gợi ý về cách tôi có thể sửa lỗi này. nhờQIODevice :: đọc: thiết bị không mở

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

Chúng tôi có thể xem một số mã không? Nếu tôi phải đoán, bạn không mở tệp đúng cách. Nếu bạn chỉ đọc từ một tập tin, tại sao bạn không sử dụng lớp 'QFile', hoặc chỉ sử dụng' fstream.h'? Ngoài ra nếu bạn đang sử dụng Qt, tệp .txt cần nằm trong thư mục xây dựng, không phải trong thư mục nguồn (giả sử bạn không thay đổi thư mục làm việc). Nếu bạn sử dụng các thiết lập mặc định, nó sẽ nằm trong một thư mục có tên 'build -% {CurrentProject: Name} -% {CurrentKit: FileSystemName} -% {CurrentBuild: Name}' – Lighthat

+0

Nó sẽ không cho phép tôi đặt đúng cú pháp // My findstuff.h #ifndef FINDSTUFF_H #define FINDSTUFF_H #include không gian tên Ui {class FindStuff;} lớp FindStuff: public QWidget {Q_OBJECTpublic: clear FindStuff (QWidget * parent = 0); ~ FindStuff(); khe riêng: void on_goButton_clicked(); riêng tư: Ui :: FindStuff * ui; void getTextFile();}; – user3878223

+0

Mã bạn đã cung cấp cho chúng tôi không giúp ích gì, chúng tôi cần xem bạn đang sử dụng 'open()' – Lighthat

Trả lời

2

Bạn đang không đi qua các tuyệt đối đường dẫn của tập tin để QFile::open(), và bạn không kiểm tra kết quả của việc mở tập tin. Trong trường hợp của bạn, đó là lỗi và open() trả về sai, nhưng bạn bỏ qua nó, thay vì sửa chữa vấn đề (đường dẫn sai) đã gây ra lỗi đó.

Điều này có liên quan đến Qt 4 -> Nâng cấp Qt 5 và mọi thứ cần làm với bạn giả định điều sai về thư mục hiện tại mà ứng dụng của bạn sẽ tự tìm thấy. Nói chung, thư mục hiện tại (hoặc thư mục làm việc) là tùy ý, và nền tảng và hoàn cảnh cụ thể, và hoàn toàn nằm ngoài tầm kiểm soát của bạn. Trừ khi người dùng cung cấp cho bạn tên tệp được tham chiếu ngầm định tới thư mục làm việc hiện tại (ví dụ như đường dẫn tương đối được đưa ra đối số dòng lệnh), bạn phải sử dụng đường dẫn tệp tuyệt đối hoặc mọi thứ sẽ không hoạt động.

+0

Trên phiên bản tôi đã xem nó hoạt động hoàn hảo như thế nào. Tôi sửa nó rồi. Cảm ơn vì đầu vào của bạn. – user3878223

+0

@ user3878223 Nó không "hoạt động hoàn toàn tốt". Nó hoạt động vì bạn đã gọi hướng dẫn theo một cách cụ thể khiến nó có vẻ hoạt động. –

+1

Tôi đã tải xuống Q4 để xem nó có hoạt động không. Nó đã làm. Vì vậy, có một cái gì đó mà thay đổi từ Q4 đến Q5. Bạn đã sai. Nhưng, cảm ơn bạn. – user3878223

7

Nếu bạn đang đọc từ tệp tài nguyên .qrc, bạn phải chạy qmake ("Build-> Run qmake" trong Qt Creator) trước khi nó có sẵn.

0

Nó có thể liên quan đến phiên bản Qt, vì Qt5 đôi khi không hoạt động với MSVC2010. Tôi có Qt 5.4 và mã của tôi đã đưa ra cùng một lỗi, khi nó làm việc với MSVC2010 OpenGL làm trình biên dịch. Tôi tự thêm MinGW 32bit để sử dụng nó làm trình biên dịch và nó hoạt động. P.S. Tôi đã không cài đặt MSVC2013 cho Qt 5.4., Và nó hoạt động đôi khi với OpenGL MSVC2010 mà không có lỗi, nhưng không phải trong trường hợp này.

0

Tôi gặp vấn đề này và hóa ra Qt Creator chưa thực sự thêm tệp .qrc vào dự án của tôi. Tôi đang sử dụng Qt Creator 4.1.0 trên máy Mac và chế độ xem dự án không phải lúc nào cũng được điền sau khi tạo dự án mới, trước tiên yêu cầu khởi động lại Trình tạo. Phiên bản của tôi về vấn đề này có thể liên quan đến vấn đề đó.

Các vấn đề liên quan