crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Считать из файла в массив построчно, помогите ньюбу
thechicho
  опции профиля:
сообщение 26.9.2011, 10:53
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 38
Регистрация: 26.9.2011
Пользователь №: 2907

Спасибо сказали: 1 раз(а)




Репутация:   0  


Сорри, я нуб, что в плюсах, что в кьюти. Не нашел раздела для новичков, поэтому решил что это наиболее подходящий.

Надо из текстового файла считать строки в массив, чтобы потом можно было его прогнать foreach. Я думаю нужно QStringList использовать как-то?
Буду, благодарен, если кто поделится готовым кодом для этого на Qt. Сам пока не могу пробовать, т.к. Qt уже почти два часа собирается, да невысобирается бл...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 26.9.2011, 12:08
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 1.4.2010
Пользователь №: 1584

Спасибо сказали: 40 раз(а)




Репутация:   6  


#include <QFile>
#include <QStringList>
#include <QtCore/QCoreApplication>

int main(int argc, char *argv[]){
    QFile inputFile;
    QStringList myList;
    inputFile.setFileName("myinput.file");
    inputFile.open(QIODevice::ReadOnly);

    while(!inputFile.atEnd()) myList.append(inputFile.readLine());

    inputFile.close();

   // do your work here
    return 0;
}


Код из головы, могут быть ошибки незначительные :)

Сообщение отредактировал silver47 - 26.9.2011, 12:10
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
thechicho
  опции профиля:
сообщение 26.9.2011, 14:20
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 38
Регистрация: 26.9.2011
Пользователь №: 2907

Спасибо сказали: 1 раз(а)




Репутация:   0  


сенкс) буду пробовать)
завершилась сборка наконец-то. 5 часов!!! и все из-за того, что нужна поддержка ssl! до этого стоял sdk и я даже представить се не мог, что такая это х...а, собрать кьюти из сорсов под виндой... столько пришлось перечитать.
поставил так (если понадобится дополнительная функциональность, придется все перекомпилировать же?.. ужас же нах... 5 часов... только если на ночь ставить) )
configure -debug-and-release -openssl -I C:\OpenSSL\include -L C:\OpenSSL\lib -no-qt3support -webkit -qt-libpng -qt-libjpeg -qt-gif -qt-sql-sqlite -qt-zlib
Адекватный мануал по установке (Сборка Qt с использованием MinGW32)
Пока его нарыл, кучу других перечитал. Официальный ввел в меня в ступор просто, как новичка. Не советую по нему производить установку, зря время потеряете :vava:

кстати, еще объясните, плиз, разницу между:
-openssl | Compile in run-time OpenSSL support | This option denotes a default value and needs to be evaluated. If the evaluation succeeds, the feature is included.
-openssl-linked | Compile in linked OpenSSL support

если опция -openssl, то надо библиотеки OpenSSL (3 штуки) держать в папке с программой?
если опция --openssl-linked, то эти библиотеки будут встроены в .exe ? (типа static сборка)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 26.9.2011, 18:07
Сообщение #4


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 1.4.2010
Пользователь №: 1584

Спасибо сказали: 40 раз(а)




Репутация:   6  


Цитата
если опция --openssl-linked, то эти библиотеки будут встроены в .exe ? (типа static сборка)

Нет. Также нужны 3 dllки. В чем разница не знаю. Делал всегда --openssl-linked

Сообщение отредактировал silver47 - 26.9.2011, 18:08
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
thechicho
  опции профиля:
сообщение 26.9.2011, 20:38
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 38
Регистрация: 26.9.2011
Пользователь №: 2907

Спасибо сказали: 1 раз(а)




Репутация:   0  


подскажите еще плиз, как мне отобразить текст на кириллице из переменной в программе правильно? иероглифы вылазят.

я ща пытаюсь так:
QString answer = reply->readAll();
ui->newEdit->append(answer);

как я понял, строки в кьюти только Utf-8, а чтобы русский текст в проге показывался - надо Windows-1251.

вот так работает:
QTextCodec *rus = QTextCodec::codecForName("Windows-1251");
QTextCodec::setCodecForTr(rus);
ui->newEdit->append(tr("фвыафод выаывфа выа "));

фвыафод выаывфа выа - это QChar получается?
если да, то с ним понятно как поступать, чтобы показывался правильно.
а как быть с переменной?..
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 27.9.2011, 5:04
Сообщение #6


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 1.4.2010
Пользователь №: 1584

Спасибо сказали: 40 раз(а)




Репутация:   6  


Я бы рекомендовал в main.cpp прописать:
QTextCodec *codec=QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);


Тогда и переменные и диалоги все нормально отображаются. Всеже, считаю, юникод более предпочтительнее.

Цитата
фвыафод выаывфа выа - это QChar получается?

Нет в Qt это будет QString

Сообщение отредактировал silver47 - 27.9.2011, 5:06
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
thechicho
  опции профиля:
сообщение 27.9.2011, 8:40
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 38
Регистрация: 26.9.2011
Пользователь №: 2907

Спасибо сказали: 1 раз(а)




Репутация:   0  


Цитата
Нет в Qt это будет QString

static QString tr(const char *sourceText, const char *comment = 0, int n = -1);

поясните плиз, почему QString?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 27.9.2011, 9:13
Сообщение #8


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 1.4.2010
Пользователь №: 1584

Спасибо сказали: 40 раз(а)




Репутация:   6  


Упс. Прошу прощения ошибся. Пора на отдых. Для того чтобы отобразить переменную QString, достаточно следующего:
tr(QString::toAscii())


Сообщение отредактировал silver47 - 27.9.2011, 9:17
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
thechicho
  опции профиля:
сообщение 28.9.2011, 10:03
Сообщение #9


Студент
*

Группа: Участник
Сообщений: 38
Регистрация: 26.9.2011
Пользователь №: 2907

Спасибо сказали: 1 раз(а)




Репутация:   0  


сенкс.
но чот я запутался.
смотрите.

если сайт в кодировке utf-8, то:
QTextCodec *codec = QTextCodec::codecForName("utf-8");
QTextCodec::setCodecForCStrings(codec);
QByteArray answer = reply->readAll();
ui->plainTextEdit->appendPlainText(answer);
показывает норм.
если же сайт в кодировке windows-1251, то чтобы показывало русские символы, надо явно задать:
QTextCodec *codec = QTextCodec::codecForName("windows-1251");

вопрос: как отобразить страницу без этих РУЧНЫХ манипуляций.
как вариант, я вижу: распарсить charset и подставить в codecForName("charset");
но если кодировка не указана на сайте не будет работать...
тогда, можно как-то преобразовать в utf-8 все? типа:
QByteArray answer = reply->readAll();
//тут answer каким-то чудесным образом преобразуется в utf-8 (да хоть во что, главное чтобы в проге показывало русский шрифт).
ui->plainTextEdit->appendPlainText(answer);

вот как-то так. помогите кодом плиз, как это реализуется :unknown:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Snake_*
сообщение 28.9.2011, 12:36
Сообщение #10





Гости








    


Делаешь в main.cpp:
  QTextCodec *codec = QTextCodec::codecForLocale();
  QTextCodec::setCodecForCStrings( codec );


А дальше:
  QString answer = codec->toUnicode( reply->readAll().toAscii() );


Что-то в этом роде.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.3.2024, 13:27