Russian Qt Forum
Ноябрь 26, 2024, 11:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с чтением из файла  (Прочитано 8302 раз)
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. Ошибок при компиляции нет. Исправьте, пожалуйста.
Записан
Fess
Гость
« Ответ #1 : Июль 25, 2011, 13:36 »

Убедитесь, что программа находит файл.
QFileInfo(path).exists()
Скорее всего текущей директорией для нее будет не та директория, где лежат исходники.
Укажите абсолютный путь, для теста.
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #2 : Июль 25, 2011, 13:39 »

Собственно результат QFile::open надо проверять.
Записан
Mikhail
Программист
*****
Online Online

Сообщений: 587


Просмотр профиля
« Ответ #3 : Июль 25, 2011, 13:40 »

А в этот слот выполнение передается?

И все написанное выше верно
Записан
ibylich
Гость
« Ответ #4 : Июль 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
Записан
UNION labs
Гость
« Ответ #5 : Июль 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;
}
Записан
ibylich
Гость
« Ответ #6 : Июль 27, 2011, 13:51 »

Вы знаете, а вот так работает, печатает содержимое файла test.txt
Только вот почему в моей программе ничего не читает?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #7 : Июль 27, 2011, 13:55 »

Файл и компилябельный пример приложи.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
ibylich
Гость
« Ответ #8 : Июль 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, в какую сторону вообще копать?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #9 : Июль 27, 2011, 17:04 »

надо все русские буквы заменить percent-encoded utf-8 эквивалентом. например, слово "русский" будет выглядеть как "%D1%80%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9" (без кавычек).

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

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Fess
Гость
« Ответ #10 : Июль 27, 2011, 17:09 »

формируйте урл через QUrl, а затем делайте toEncoded() и получите его валидное представление.
И потом, у вас могут быть проблемы с не латинскими символами в исходниках.
Записан
ibylich
Гость
« Ответ #11 : Июль 27, 2011, 18:48 »

Как проблемы? Я же исходник сохраняю в UTF-8, поэтому проблем быть не должно) Наверное.
Я когда на Clojure писал, то там можно было вообще давать переменнм русские имена, например "Икс". В убунте стоит кодировка систему UTF-8, gcc должен ее переварить.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 22.