Russian Qt Forum

Qt => Общие вопросы => Тема начата: taifun от Апрель 01, 2010, 16:53



Название: Медленный вывода текстового файла в компонент Text Editor
Отправлено: taifun от Апрель 01, 2010, 16:53
Написал функцию вывода текстового файла в компонент  Text Editor, но вывод осуществляется долго. Нельзя как-нибудь скорости добавить?

Код:
void MainWindow::readFile()
{
    qDebug() << "******** File reading ********";
    QFileDialog *OpenFileDialog;
    QString fileName = OpenFileDialog->getOpenFileName(this, trUtf8("Открыть"));
    QFile file(fileName);                                                     //создаем файл
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))  //открываем файл
         return;

    QTextStream in(&file);
    while (!in.atEnd()) {                                                      //читаем, пока не достигнем конца
         QString line = in.readLine();
         ui->textEdit->insertPlainText(line + "\n");
     }
    file.close();

}


Название: Re: Медленный вывода текстового файла в компонент Text Editor
Отправлено: kibsoft от Апрель 01, 2010, 17:21
Если файл небольшой и память позволяет, то можно вместо построчного чтения использовать readAll(), а затем setPlainText. Либо просто вместо ui->textEdit->insertPlainText(line + "\n"); делать ui->textEdit->append(line).
Да и вообще не за чем создавать переменную line каждый раз в цикле (это очень прожорливо)
Цитировать
QString line;
while (!in.atEnd()) {                                                      //читаем, пока не достигнем конца
         line = in.readLine();
         ui->textEdit->insertPlainText(line + "\n");
     }


Название: Re: Медленный вывода текстового файла в компонент Text Editor
Отправлено: SABROG от Апрель 01, 2010, 19:57
Голосуй, чтобы пофиксили: http://bugreports.qt.nokia.com/browse/QTBUG-3554


Название: Re: Медленный вывода текстового файла в компонент Text Editor
Отправлено: taifun от Апрель 02, 2010, 07:39
Если файл небольшой и память позволяет, то можно вместо построчного чтения использовать readAll(), а затем setPlainText. Либо просто вместо ui->textEdit->insertPlainText(line + "\n"); делать ui->textEdit->append(line).
Да и вообще не за чем создавать переменную line каждый раз в цикле (это очень прожорливо)

Дааа, с переменной проглядел. А файлы большие.