【问题标题】:QIODevice::read: device not openQIODevice::read: 设备未打开
【发布时间】:2014-07-25 19:22:27
【问题描述】:

我试图从文件中读取并放入文本编辑中,它一直说 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();
};

【问题讨论】:

  • 我们可以看一些代码吗?如果我不得不猜测,您没有正确打开文件。如果您只是从文件中读取,为什么不使用QFile 类,或者只使用fstream.h?此外,如果您使用 Qt,.txt 文件需要位于构建目录中,而不是源目录中(假设您不更改工作目录)。如果使用默认设置,它将位于名为 build-%{CurrentProject:Name}-%{CurrentKit:FileSystemName}-%{CurrentBuild:Name} 的文件夹中
  • 它不会让我输入正确的语法 //My findstuff.h #ifndef FINDSTUFF_H #define FINDSTUFF_H #include namespace Ui {class FindStuff;} class FindStuff : public QWidget{ Q_OBJECTpublic: explicit FindStuff(QWidget *parent = 0); ~FindStuff();私有插槽:void on_goButton_clicked();私有:Ui::FindStuff *ui;无效 getTextFile();};
  • 你给我们的代码没有帮助,我们需要看看你是如何使用open()

标签: c++ qt qt4 qt-creator


【解决方案1】:

如果您从 .qrc 资源文件中读取,则必须先运行 qmake(Qt Creator 中的“Build->Run qmake”)才能使用它。

【讨论】:

    【解决方案2】:

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

    这与 Qt 4 -> Qt 5 升级有关,并且与您有关的一切都与假设您的应用程序碰巧找到的当前目录有关。一般来说,当前目录(或工作目录)是任意的,特定于平台和环境,完全不受您的控制。除非用户给你一个隐式引用到当前工作目录的文件名(例如,作为给定命令行参数的相对路径),否则你必须使用绝对文件路径,否则事情将无法正常工作。

    【讨论】:

    • 在教程中我看到它工作得非常好。我修好了它。感谢您的意见。
    • @user3878223 它并没有“完全正常工作”。它之所以有效,是因为您以一种使其看起来有效的特定方式调用了本教程。
    • 我下载了 Q4 看看它是否可以工作。它做了。所以从第四季度到第五季度发生了一些变化。你错了。但是,谢谢。
    【解决方案3】:

    这可能与 Qt 的版本有关,因为 Qt5 有时不适用于 MSVC2010。 我有 Qt 5.4,当它使用 MSVC2010 OpenGL 作为编译器时,我的代码给出了同样的错误。我手动添加了 MinGW 32bit 以将其用作编译器并且它可以工作。 附:我还没有为 Qt 5.4 安装 MSVC2013。它有时可以与 MSVC2010 OpenGL 一起使用而不会出错,但在这种情况下不会。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        与Qt版本无关。 即使您的 .txt 文件与 .cpp 文件位于同一目录中,您仍然需要添加该目录。我遇到了同样的问题,那个简单的解决方案效果很好。 阿曼·阿雷菲

        【讨论】:

          【解决方案6】:

          如果您关闭一个未打开的文件,这通常是这种情况 - 所以只需删除关闭语句,例如:

          file->close();
          

          删除它;)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-02-26
            • 2020-07-13
            • 1970-01-01
            • 1970-01-01
            • 2015-10-27
            • 1970-01-01
            • 2017-05-28
            • 1970-01-01
            相关资源
            最近更新 更多