qstringlist 报错 “.at”的左边必须有类/结构/联合
时间: 2023-12-01 19:03:04 浏览: 149
这个错误通常是因为你在调用 `at` 函数时,没有将其应用于一个类、结构体或者联合类型的对象上。请确保你在调用 `at` 函数时,将其用于一个 `QStringList` 对象上,例如:
```cpp
QStringList list;
// ...
QString element = list.at(index);
```
在这个示例中,我们将 `at` 函数应用于了 `QStringList` 对象 `list` 上,并将返回的元素存储在 `element` 中。请检查你的代码,确保你正确地使用了 `at` 函数。如果问题仍然存在,请提供更多的代码细节,以便我能够更好地帮助你解决问题。
相关问题
class ZHtoPY{ ZHtoPY(); public: QStringList listPY; //拼音列表 static QStringList ZH2PY(QString strChinese); }; inline ZHtoPY::ZHtoPY(){ //从配置文件读取拼音数组 QFile file(":/tt/ChineseToPinyin.json"); if (file.open(QFile::ReadOnly | QFile::Text)) { QString str = file.readAll(); listPY = str.split(" "); } } inline QStringList ZHtoPY::ZH2PY(QString strChinese){ // QString strChinese = "动臂"; //获取中文字符 QStringList list; for (int i = 0; i < strChinese.length(); i++) { int unicode = QString::number(strChinese.at(i).unicode(), 10).toInt(); //将每个汉字转换为十进制的unicode编码 if (unicode >= 0x4E00 && unicode <= 0x9FA5) //如果是中文则转换 { //这里的listPY就是按照UNICODE每个中文对应的拼音数组 list.append(listPY.at(unicode - 0x4E00)); } else { list.append(strChinese.at(i)); } } return list; } 报错 “.at”的左边必须有类/结构/联合
根据你提供的代码,我注意到 `listPY` 是 `ZHtoPY` 类的一个成员变量,但是你在 `ZHtoPY::ZH2PY` 函数中使用了 `listPY.at()`。然而,问题出在你没有在 `ZH2PY` 函数内部访问 `listPY` 成员变量的方式上。
你可以通过在 `ZH2PY` 函数内部使用 `this->listPY.at()` 来访问 `listPY` 成员变量。这样修改后的代码如下:
```cpp
inline QStringList ZHtoPY::ZH2PY(QString strChinese){
// ...
// 这里是修改的部分
list.append(this->listPY.at(unicode - 0x4E00));
// ...
}
```
或者,你也可以直接使用成员访问操作符 `.` 来访问 `listPY` 成员变量,而无需使用 `this` 指针:
```cpp
inline QStringList ZHtoPY::ZH2PY(QString strChinese){
// ...
// 这里是修改的部分
list.append(listPY.at(unicode - 0x4E00));
// ...
}
```
请根据你的喜好选择其中一种修改方式,并重新编译运行你的代码。这样应该能够解决报错问题。如果问题仍然存在,请提供更多的错误信息或者相关代码细节,以便我能够更好地帮助你解决问题。
while(!in.atEnd()) { //遍历文件内容 line = in.read(1);//读取一行内容 if(line!=" ") { //number++; y+=line; } //输出内容 //qDebug() << line; // list.append(line); // qInfo()<<list.size(); //qInfo()<<o->rowCount(); } //qDebug()<<number; qDebug()<<y; QStringList listp = y.split(","); qDebug()<<listp; file.close(); //关闭文件
这段代码是读取一个文件的内容,并将内容按照逗号分隔成一个QStringList。具体的代码解释如下:
- `while(!in.atEnd())`:使用while循环遍历文件内容,直到文件读取结束。
- `line = in.read(1);`:每次读取一个字符,存储在`line`变量中。
- `if(line!=" ")`:判断读取的字符是否为空格,如果不是则将字符加入到字符串`y`中。
- `QStringList listp = y.split(",");`:将字符串`y`按照逗号分隔成一个QStringList,存储在`listp`中。
- `file.close();`:关闭文件。
需要注意的是,在这段代码中,每次读取一个字符可能会导致读取速度较慢,可以考虑一次性读取多个字符,提高效率。另外,读取文件内容时,需要确保文件存在并且能够被打开。
阅读全文