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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Разбор полученной QString строки от QLineEdit.Срочно  (Прочитано 8763 раз)
kip_one
Гость
« : Сентябрь 16, 2012, 22:48 »

Уже голову поломал, но не получилось. Нужно разобрать строку на части и числа занести в числовые константы.

Буду рад любой помощи.

Например:

В QLineEdit записываю : line(15,10,99,100)

И обрисовывается линия с такими координатами.

QString a[5]

Нужно что-бы a[0]="15";a[1]="10";a[2]="99";a[3]="100";a[4]="line"
« Последнее редактирование: Сентябрь 18, 2012, 21:20 от kip_one » Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #1 : Сентябрь 16, 2012, 23:04 »


Код
C++ (Qt)
QChar l, h;
//... присваиваем значения QChar'ам
int res = l.unicode () + h.unicode () * 0x10000;
 
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
Alex_C
Гость
« Ответ #2 : Сентябрь 17, 2012, 15:52 »

Может все же имеется ввиду
Код
C++ (Qt)
QChar a, b;
 
int i = QString(a + b).toInt();
 
 
Записан
kip_one
Гость
« Ответ #3 : Сентябрь 18, 2012, 21:18 »

Можно ли в данном случае воспользоватся QRegExp? Если да, то как?
Записан
Bepec
Гость
« Ответ #4 : Сентябрь 18, 2012, 21:24 »

Делаем проще.

Спрашиваем строку, есть ли там line (contains("строка") поможет). Записываем результат в переменную
Обрезаем от "(" до ")" включительно(indexOf("скобочки") поможет найти, mid() поможет отрезать).
А далее split(",").

На выходе получаем то что ты хочешь Улыбающийся Массив числовых значений  + переменная которая показывает есть ли там line Улыбающийся

PS RegExp конечно можно применить, но я с ним не дружу. Да и говорят медленный он Улыбающийся
Записан
cya-st
Гость
« Ответ #5 : Сентябрь 18, 2012, 21:36 »

Попробуй сначала разбить на меньшие блоки
Код:
QStringList lessBlocks = inputStr.split(";");
потом еще на меньшие
Код:
foreach(QString block, lessBlocks) {
    QStringList lslsBlocks = block.split("=");
}
и так далее
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #6 : Сентябрь 18, 2012, 23:43 »

Код
C++ (Qt)
   QString data = "line(15,10,99,100)";
   QRegExp rx("(line)\\(([0-9]+),([0-9]+),([0-9]+),([0-9]+)\\)");
 
   if(rx.exactMatch(data))
       qDebug() << rx.cap(1) << rx.cap(2) << rx.cap(3) << rx.cap(4) << rx.cap(5);
   else
       qDebug("No match");
 

Пустые блоки в виде \\s* добавить по вкусу.
Записан
Alex_C
Гость
« Ответ #7 : Сентябрь 19, 2012, 10:48 »

По моему все же самый верный совет у Вереса - RegExp и медленный, и если строка будет такая
line(10, 20, 30 , 40) - пользователь может и с пробелами вводить.
по моему так лучше

Код
C++ (Qt)
QString data = "line(15,10,99,100)";
 
int i = data.indexOf("line(");
 
if( i > -1)
{
   i = i + 5; // Находим первую позицию за открывающейся скобкой
   data = data.mid(i); // копируем то, что после открывающейся скобки
   data = data.mid(0, data.indexOf(")"); // теперь у нас  data = "15,10,99,100";
   QStringList a = data.split(",");
   // ну и для верности убираем пробелы
   for(i = 0; i < a.size(); i++)
     a[i] = a.at(i).replace(' ', QChar());
}
 

« Последнее редактирование: Сентябрь 19, 2012, 10:50 от Alex_C » Записан
Bepec
Гость
« Ответ #8 : Сентябрь 19, 2012, 12:53 »

Alex_c вы упустили маленькую заковырку Улыбающийся

Судя по настроению ТСса, туда будут вводиться различные данные аля
Код:
rectangle()
line()
point()

Потому ваш код нуждается в маленькой и очевидной доработке (даже паре, но приведу ток одну) Улыбающийся

Это добавление переменной, которая будет содержать строку до "(".
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #9 : Сентябрь 19, 2012, 13:36 »

Код
C++ (Qt)
   for(i = 0; i < a.size(); i++)
     a[i] = a.at(i).replace(' ', QChar());
}
 
Не понял как это должно работать - что должно быть вместо пробелов?
Ну а главное - такие "кусочки кода" никакой общностью не обладает. Возникла чуть другая задача - и весь разбор по новой. Где-то после 5-го куска начинают терзать угрызения совести - надо ведь обобщить. Но это непросто, а так - сделал за 5 минут и забыл  (потом правда отловил пару багов).
Записан
Bepec
Гость
« Ответ #10 : Сентябрь 19, 2012, 13:43 »

Ну что сказать - достаточно просто написать классик для себя с разными видами разборов.

Но на такие дела использовать RegExp - меня гложут смутные сомнения в правильности подобного.

PS и если нужен будет чуть другой - придётся таки переписывать RegExp.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #11 : Сентябрь 19, 2012, 14:00 »

Ну что сказать - достаточно просто написать классик для себя с разными видами разборов.
Цитировать
- у меня проездной
- предъявляем!
Улыбающийся Вот у меня такое чувство что Вашего классика я не увижу (будете торговаться и.т.п.). Или я неправ?  Улыбающийся
Записан
kip_one
Гость
« Ответ #12 : Сентябрь 19, 2012, 17:32 »

Верес с вашей помощью все получилось, хотя и попробовал использовать QRegExp, но с ним работать сложнее(как для меня).
Только не получается рисовать по отрицательным координатам. У есть идеи? Улыбающийся
Записан
Bepec
Гость
« Ответ #13 : Сентябрь 19, 2012, 18:36 »

А ты не рисуй по отрицательным. Отрицательные координаты = выход за предел области рисования. Значит пользователь всё равно их не увидит => нафиг надо рисовать Улыбающийся

to Igors: могу переслать, но у меня в нём пока только 2 функции - выдирают значение между 2 сепараторами и/или выдирают список строк между сепараторами.  Других функций пока нет, ибо написать что-то подобное этой задаче - дело минуты + минут 20 на проверку и написание теста (если очень надо).

PS помоему РегЕксп - это танк. А применять танк когда нужен удар ладошкой - немного не то Улыбающийся
Записан
kip_one
Гость
« Ответ #14 : Сентябрь 19, 2012, 19:09 »

Я рисую линию на QGraphicsScene, так вот когда я ставлю координаты 0,0 и размеры 1,1 - точка получается по центру, а вот когда уже   
питаюсь нарисовать другую линию - центр смещается. 
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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