Ошибка выполнения Qt - PullRequest
       3

Ошибка выполнения Qt

0 голосов
/ 04 марта 2012

Я использую 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 - это число). Файл, из которого я получаю данные, содержит

NewYork @ # @ # Лондон.

Ответы [ 2 ]

3 голосов
/ 04 марта 2012

Логика вашего кода слишком сложна. Используйте 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 голос
/ 04 марта 2012

Это if(i>=data.size())

Ошибка времени выполнения, вероятно, является ошибкой, потому что вы выходите за пределы последнего символа в вашей QString.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...