0

我看过几个不同的教程,所有代码看起来都一样,但是当我尝试编译它时,我得到了两个错误。它们不匹配调用“(QFile)(QString&)”不匹配调用“(QTextSteam)(Qfile)”。你能解释一下为什么吗?以下是我的代码的一部分,如果您需要更多内容,请询问。

我的标题代码块

private:
QLabel *label;
QTextEdit *left;
QTextEdit *right;
QLineEdit *user;
QTextStream file;
QFile namefile;
QString name;
QString n;

我的源代码

n ="name.txt";
namefile(n);
if (!namefile.open(QFile::ReadOnly))
{
    return;
}
file(&namefile);
name=file.readLine();
right->setText(name);
4

2 回答 2

0

您的问题似乎与 C++ 的关系比与 Qt 的关系更大。特别是,您应该了解一下 C++ 初始化列表以及类成员的一般构造方式。

无论如何,我假设您列为“我的源代码”的代码位于类的构造函数中。一种选择是首先重新排序私有成员,以便按初始化顺序列出它们:

private:
QString n;
QFile namefile;
QTextStream file;
QString name;

然后在类构造函数的初始化列表中初始化它们:

MyClass::MyClass()
   :n("name.txt")
   ,namefile(n)
   ,file(&namefile)
{
   if (!namefile.open(QIODevice::ReadOnly))
   {
      return;
   }

   name = file.readLine();

   // Rest of your code goes here.
}

还有其他方法可以做到这一点,但我会留给你研究我上面建议的内容。

于 2013-03-08T05:37:55.430 回答
-1

只是改变

file.setDevice(&namefile);
于 2017-11-02T18:04:26.940 回答