Russian Qt Forum

Qt => Общие вопросы => Тема начата: ibylich от Июль 25, 2011, 13:23



Название: Проблема с чтением из файла
Отправлено: ibylich от Июль 25, 2011, 13:23
Уже прочитал несколько тем на этом форуме. Везде одно и то же, но у меня оно почему-то работать не хочет.
Код:
void MainWindow::on_pushButton_clicked()
{
     QFile file("n1.cpp");
     file.open(QIODevice::ReadOnly | QIODevice::Text);
     QTextStream in(&file);
     while (!in.atEnd())
     {
          QString line;
          in>>line;
          ui->textEdit->append(line);
     }
     file.close();
}
Вот этот код почему-то ничего в textEdit не выводит. Подключены библиотеки QFile и QTextStream. Ошибок при компиляции нет. Исправьте, пожалуйста.


Название: Re: Проблема с чтением из файла
Отправлено: Fess от Июль 25, 2011, 13:36
Убедитесь, что программа находит файл.
QFileInfo(path).exists()
Скорее всего текущей директорией для нее будет не та директория, где лежат исходники.
Укажите абсолютный путь, для теста.


Название: Re: Проблема с чтением из файла
Отправлено: LisandreL от Июль 25, 2011, 13:39
Собственно результат QFile::open надо проверять.


Название: Re: Проблема с чтением из файла
Отправлено: Mikhail от Июль 25, 2011, 13:40
А в этот слот выполнение передается?

И все написанное выше верно


Название: Re: Проблема с чтением из файла
Отправлено: ibylich от Июль 25, 2011, 14:24
Немного заменил код.
Код:
void MainWindow::on_pushButton_clicked()
{
     QFile file("n1.cpp");
     if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
          setWindowTitle("No file!");
     else setWindowTitle("Yes file!");
     QTextStream in(&file);
     while (!in.atEnd())
     {
          QString line;
          in>>line;
          ui->textEdit->append(line);
     }
     file.close();
}

код компилится, при нажатии на pushButton надпись на окне меняется на Yes file!, значит файл существует.
можно, конечно, стандартными сишными средствами, но хочется средствами Qt


Название: Re: Проблема с чтением из файла
Отправлено: UNION labs от Июль 25, 2011, 14:53
А если попробовать так:

Код:
#include <QApplication>
#include <QDebug>
#include <QFile>

int main(int argc, char **argv)
{
    QFile f("test.txt");

    if (!f.exists()) {
        qDebug("File isn't exist...");
    } else {
        if (!f.open(QIODevice::ReadOnly)) {
            qDebug("File isn't open...");
        } else {
            while(!f.atEnd()) qDebug(f.readLine());
        }
    }

    return 1;
}


Название: Re: Проблема с чтением из файла
Отправлено: ibylich от Июль 27, 2011, 13:51
Вы знаете, а вот так работает, печатает содержимое файла test.txt
Только вот почему в моей программе ничего не читает?


Название: Re: Проблема с чтением из файла
Отправлено: Пантер от Июль 27, 2011, 13:55
Файл и компилябельный пример приложи.


Название: Re: Проблема с чтениТем из файла
Отправлено: ibylich от Июль 27, 2011, 16:30
Все, разобрался.

Вставил кусок код из поста UNION labs и все заработало) Огромное Вам спасибо)
Когда я пытался читать через QTextStream, оно почему-то не работало. А теперь работает.

Возник еще вопрос.
Нужно скачать интернет страницу(гугла), у которой часть адреса - русские символы.
Например такую :
http://www.google.com/search?client=ubuntu&channel=fs&q=русский&ie=utf-8&oe=utf-8
Пытался делать через питон и urllib.open(), но в адресе заменяло русские буквы на кракозябры и запрос получался не правильный.
Как это сделать на Qt, в какую сторону вообще копать?


Название: Re: Проблема с чтением из файла
Отправлено: kambala от Июль 27, 2011, 17:04
надо все русские буквы заменить percent-encoded (http://en.wikipedia.org/wiki/Percent-encoding) utf-8 эквивалентом. например, слово "русский" будет выглядеть как "%D1%80%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9" (без кавычек).

а как страницу скачать только недавно несколько раз обсуждалось, посмотри в поиске.


Название: Re: Проблема с чтением из файла
Отправлено: Fess от Июль 27, 2011, 17:09
формируйте урл через QUrl, а затем делайте toEncoded() и получите его валидное представление.
И потом, у вас могут быть проблемы с не латинскими символами в исходниках.


Название: Re: Проблема с чтением из файла
Отправлено: ibylich от Июль 27, 2011, 18:48
Как проблемы? Я же исходник сохраняю в UTF-8, поэтому проблем быть не должно) Наверное.
Я когда на Clojure писал, то там можно было вообще давать переменнм русские имена, например "Икс". В убунте стоит кодировка систему UTF-8, gcc должен ее переварить.