crossplatform.ru

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

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> [QT4] Доступ к QStringList
++Norton++
  опции профиля:
сообщение 5.10.2008, 23:58
Сообщение #1


Студент
*

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

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




Репутация:   1  


Возможно вопрос ламерский, но ищу ответ вот уже сутки по самым разным форумам, и никак не найду ответа. Вопрос заключается в следующем. Есть QStringList со значениями. Как можно вывести на экран, например 1 и 5 его значения? И можно ли вообще? (а то уже стал терять надежду) Желательно на примере. Заранее огромное спасибо!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 6.10.2008, 4:06
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


довольно просто:
QString str;
QStringList fonts;
fonts << "Arial" << "Helvetica" << "Times" << "Courier";
str = fonts.at(2); // даст строку "Times"

незабывай что у класса есть унаследованные члены, например, на странице документации QStringList естьтакая строчка: List of all members, including inherited members в ней и числится такая функция at(int)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 6.10.2008, 8:03
Сообщение #3


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

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




Репутация:   40  


И не забываем про оператор индексирования (operator[]):
QStringList fonts;
fonts << "Arial" << "Helvetica" << "Times" << "Courier";
QString sz2 = fonts[1]; // Получаем 2 элемент
QString sz4 = fonts[3]; // Получаем 4 элемент
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
++Norton++
  опции профиля:
сообщение 6.10.2008, 22:10
Сообщение #4


Студент
*

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

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




Репутация:   1  


Странно, попробовал, но в ответ Segmentation Fault. Вот код:
#include <QApplication>
#include <QTextStream>
#include <QString>
#include <QStringList>
#include <QtCore>

    int main(int argc, char *argv[]) {

    QTextStream err(stderr);
    QTextStream out(stdout);
    QTextStream in(stdin);
    QString cmdline;
    QString pharse;

    in >> cmdline;

    QStringList lst;
    lst = cmdline.split(" ");
    pharse = lst.at(1);
    out << pharse;
    return 0;

    }

Может быть здесь что не так? Если что-то не так, подскажите пожалуйста!
Причина редактирования: добавляй параметр к открывающемуся тэгу: code=cpp
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 6.10.2008, 22:17
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


всегда проверяй размер контейнера, метод size(), если я правильно помню, возможно он у тебя пустой
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
++Norton++
  опции профиля:
сообщение 6.10.2008, 22:20
Сообщение #6


Студент
*

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

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




Репутация:   1  


Цитата(Litkevich Yuriy @ 6.10.2008, 23:17) *
всегда проверяй размер контейнера, метод size(), если я правильно помню, возможно он у тебя пустой

Да вроде не пустой. Компилирую, дальше (в in >> cmdline) ввожу:
aa bbb ccc
И в ответ Segmentation Fault
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 6.10.2008, 22:37
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


проверь:

qDebug() << lst << "\n";
if (lst.size())
  pharse = lst.at(1);


хотя нет этот код кривой
надо так:
qDebug() << lst << "\n";
if (lst.size()>1)
  pharse = lst.at(1);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
++Norton++
  опции профиля:
сообщение 6.10.2008, 22:48
Сообщение #8


Студент
*

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

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




Репутация:   1  


Цитата(Litkevich Yuriy @ 6.10.2008, 23:37) *
проверь:

qDebug() << lst << "\n";
if (lst.size())
  pharse = lst.at(1);


хотя нет этот код кривой
надо так:
qDebug() << lst << "\n";
if (lst.size()>1)
  pharse = lst.at(1);


Проверил. Очень странные результаты. Менял lst.at(1) на lst.at(2) lst.at(3) и т.д. Входные данные были: a b c d e f g
Выдает всегда только a (вот командная строка):
n0rt0n@n0rt0n ~/doc/programming/emulqt $ ./emulqt
a b c d e f
("a")

Вот этот вывод ("a") всегда, как только не менять at(n). Что может быть не так?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 6.10.2008, 22:59
Сообщение #9


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


есть такое дело, тоже проверил, похоже что пробел воспринимается как разднлитель, и только один символ идет в переменную cmdline
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 6.10.2008, 23:00
Сообщение #10


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Попробуй вводить не с консоли значения. А ручками заполнить список. То есть, вот так, например:
list << "a" << "b" << "c" << "d" << "d";
QString s1 = list.at(3); // s1 = "d"


Скорее всего, проблема именно с правильностью заполнения списка. Поэтому прошу проверить данный пример.

Сообщение отредактировал AD - 6.10.2008, 23:02
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 26.12.2024, 23:15