Russian Qt Forum

Qt => Вопросы новичков => Тема начата: kip_one от Сентябрь 16, 2012, 22:48



Название: Разбор полученной QString строки от QLineEdit.Срочно
Отправлено: 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"


Название: Re: 2 элемента QChar соединить в один и преобразовать в int
Отправлено: Kurles от Сентябрь 16, 2012, 23:04

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


Название: Re: 2 элемента QChar соединить в один и преобразовать в int
Отправлено: Alex_C от Сентябрь 17, 2012, 15:52
Может все же имеется ввиду
Код
C++ (Qt)
QChar a, b;
 
int i = QString(a + b).toInt();
 
 


Название: Re: Разбор полученной QString строки от QLineEdit.Срочно
Отправлено: kip_one от Сентябрь 18, 2012, 21:18
Можно ли в данном случае воспользоватся QRegExp? Если да, то как?


Название: Re: Разбор полученной QString строки от QLineEdit.Срочно
Отправлено: Bepec от Сентябрь 18, 2012, 21:24
Делаем проще.

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

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

PS RegExp конечно можно применить, но я с ним не дружу. Да и говорят медленный он :)


Название: Re: Разбор полученной QString строки от QLineEdit.Срочно
Отправлено: cya-st от Сентябрь 18, 2012, 21:36
Попробуй сначала разбить на меньшие блоки
Код:
QStringList lessBlocks = inputStr.split(";");
потом еще на меньшие
Код:
foreach(QString block, lessBlocks) {
    QStringList lslsBlocks = block.split("=");
}
и так далее


Название: Re: Разбор полученной QString строки от QLineEdit.Срочно
Отправлено: Alex Custov от Сентябрь 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* добавить по вкусу.


Название: Re: Разбор полученной QString строки от QLineEdit.Срочно
Отправлено: Alex_C от Сентябрь 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());
}
 



Название: Re: Разбор полученной QString строки от QLineEdit.Срочно
Отправлено: Bepec от Сентябрь 19, 2012, 12:53
Alex_c вы упустили маленькую заковырку :)

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

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

Это добавление переменной, которая будет содержать строку до "(".


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


Название: Re: Разбор полученной QString строки от QLineEdit.Срочно
Отправлено: Bepec от Сентябрь 19, 2012, 13:43
Ну что сказать - достаточно просто написать классик для себя с разными видами разборов.

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

PS и если нужен будет чуть другой - придётся таки переписывать RegExp.


Название: Re: Разбор полученной QString строки от QLineEdit.Срочно
Отправлено: Igors от Сентябрь 19, 2012, 14:00
Ну что сказать - достаточно просто написать классик для себя с разными видами разборов.
Цитировать
- у меня проездной
- предъявляем!
:) Вот у меня такое чувство что Вашего классика я не увижу (будете торговаться и.т.п.). Или я неправ?  :)


Название: Re: Разбор полученной QString строки от QLineEdit.Срочно
Отправлено: kip_one от Сентябрь 19, 2012, 17:32
Верес с вашей помощью все получилось, хотя и попробовал использовать QRegExp, но с ним работать сложнее(как для меня).
Только не получается рисовать по отрицательным координатам. У есть идеи? :)


Название: Re: Разбор полученной QString строки от QLineEdit.Срочно
Отправлено: Bepec от Сентябрь 19, 2012, 18:36
А ты не рисуй по отрицательным. Отрицательные координаты = выход за предел области рисования. Значит пользователь всё равно их не увидит => нафиг надо рисовать :)

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

PS помоему РегЕксп - это танк. А применять танк когда нужен удар ладошкой - немного не то :)


Название: Re: Разбор полученной QString строки от QLineEdit.Срочно
Отправлено: kip_one от Сентябрь 19, 2012, 19:09
Я рисую линию на QGraphicsScene, так вот когда я ставлю координаты 0,0 и размеры 1,1 - точка получается по центру, а вот когда уже   
питаюсь нарисовать другую линию - центр смещается. 


Название: Re: Разбор полученной QString строки от QLineEdit.Срочно
Отправлено: kip_one от Сентябрь 19, 2012, 19:16
Значит выставил нулевые координаты с помощью sceneRect, и нулевые координаты стали в левый верхний угол