我正在使用Qt IDE。以下代码导致Microsoft Visual C ++运行时库错误。此外,程序而不是显示带有文本“NewYork”和“London”的项目,显示“NewYork”和“Londonk”然后崩溃。这是代码。
void MainWindow::on_listWidget_itemClicked(QListWidgetItem *item) // creates comments for item
{
ui->listWidget_2->clear();
ui->commentbutton->setEnabled(true);
QFile files("E:/"+QString::number(ui->listWidget->currentRow())+"com.txt");
if(files.exists())
{
if(!files.open(QFile::ReadOnly | QFile::Text))
{
QMessageBox::warning(this,"File Access!!!","The File containing data of the Items and Comments can't be acessed",QMessageBox::Ok);
return;
}
QTextStream in(&files);
QString data(in.readLine());
int x=0;
QString temp;
for(int i=0;;i++)
{
if(i>data.size())
break;
if(data.at(i)!='@' && data.at(i+1)!='#')
{
temp[x]=data.at(i);
x++;
}
else
if(data.at(i)=='@' && data.at(i+1)=='#')
{
QListWidgetItem *itm=new QListWidgetItem;
x=0;
i++;
itm->setText(temp);
ui->listWidget_2->addItem(itm);
}
}
files.close();
}
程序正确生成Xcom.txt文件(X是数字)。我正在从中检索数据的文件包含此
纽约@#伦敦@#。
答案 0 :(得分:3)
代码的逻辑太复杂了。使用QString.split
获取您感兴趣的部分。
示例:
#include <QtCore>
int main(void)
{
QString foo("NewYork@#London@#");
QStringList parts = foo.split("@#", QString::SkipEmptyParts);
foreach(QString part, parts) {
qDebug() << part;
}
return 0;
}
您的代码可以简化为:
QString data(in.readLine());
QStringList parts = data.split("@#", QString::SkipEmptyParts);
foreach (QString part, parts) {
QListWidgetItem *itm=new QListWidgetItem;
itm->setText(part);
ui->listWidget_2->addItem(itm);
}
答案 1 :(得分:1)
是if(i>=data.size())
运行时错误可能是一个断言,因为你超出了QString中的最后一个字符。