QIODevice::read:设备未打开

QIODevice::read: device not open

本文关键字:read QIODevice      更新时间:2023-10-16

我试图从文件中读取并放入文本编辑,它一直说QIODevice::read:device未打开。txt文件与我的.qrc和.cpp文件位于相同的位置。我是从网上一步一步的指导。从我的理解来看,当他们从第四季度转到第五季度时,他们改变了一些东西。有没有人有任何提示我如何才能解决这个问题。由于

//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();
};

如果你从。qrc资源文件中读取,你必须运行qmake(在Qt Creator中"Build-> run qmake"),然后才能使用。

您没有将绝对路径传递给QFile::open(),并且您没有检查打开文件的结果。在您的例子中,这是一个失败并且open()返回false,但是您忽略了它,而不是修复导致它的问题(错误的路径)。

这与Qt 4 -> Qt 5升级没有任何关系,而是与您假设应用程序碰巧发现自己所在的当前目录错误有关。一般来说,当前目录(或工作目录)是任意的,是特定于平台和环境的,完全不受您的控制。除非用户提供给你一个隐式引用到当前工作目录的文件名(例如,作为给定命令行参数的相对路径),否则你必须使用绝对文件路径,否则事情根本不会起作用。

这可能与Qt的版本有关,因为Qt5有时不能与MSVC2010一起工作。我有Qt 5.4和我的代码给出了同样的错误,当它与MSVC2010 OpenGL作为编译器工作时。我手动添加了MinGW 32bit来使用它作为编译器,它工作了。P.S.我没有为Qt 5.4安装MSVC2013。,它有时与MSVC2010 OpenGL一起工作而没有错误,但在这种情况下不是。

这主要是在关闭未打开的文件时出现的情况,因此只需删除close语句,例如:

file->close();

我有这个问题,原来Qt Creator并没有实际添加。qrc文件到我的项目。我在Mac上使用Qt Creator 4.1.0,项目视图并不总是在创建新项目后填充,首先需要重新启动Creator。我对这个问题的看法可能与此有关。

与Qt版本没有任何关系。即使.txt文件与.cpp文件位于同一目录中,您仍然需要添加该目录。我也遇到过同样的问题,这个简单的解决方案效果很好。阿尔曼Arefi