Russian Qt Forum

Qt => Общие вопросы => Тема начата: Пантер от Ноябрь 08, 2010, 11:54



Название: [4.x.x] Как QString вывести %n?
Отправлено: Пантер от Ноябрь 08, 2010, 11:54
Возник вопрос. Есть такой код:
QString ("%1 %1").arg ("etc")
Вопрос в том, как заэскейпить первый %1, чтобы заменился второй? Поиск в ассистенте ничего не дал.


Название: Re: [4.x.x] Как QString вывести %n?
Отправлено: Hellraiser от Ноябрь 08, 2010, 12:17
А вот такой вариант не подойдет?
Код
C++ (Qt)
QString("%1 %2").arg("%1", "etc")


Название: Re: [4.x.x] Как QString вывести %n?
Отправлено: Пантер от Ноябрь 08, 2010, 12:22
Неа. Нужно именно заэскейпить.


Название: Re: [4.x.x] Как QString вывести %n?
Отправлено: Hellraiser от Ноябрь 08, 2010, 13:01
Разбором в данном случае будет заниматься findArgEscapes из QString. А судя по исходникам - тупо ищется % и следующий за ним символ (цифра). Похоже что в такой постановке задачи - никак.
P.S. Не прокатывает даже извращенный вариант QString("%\x31 %1)


Название: Re: [4.x.x] Как QString вывести %n?
Отправлено: Пантер от Ноябрь 08, 2010, 13:03
Прихожу к такому же выводу. ИМХО, баг это.


Название: Re: [4.x.x] Как QString вывести %n?
Отправлено: zenden от Ноябрь 08, 2010, 13:05
Можно попробовать вставить какой-нибудь невидимый символ между % и цифрой.


Название: Re: [4.x.x] Как QString вывести %n?
Отправлено: Пантер от Ноябрь 08, 2010, 13:17
Не во всех случаях проканает.


Название: Re: [4.x.x] Как QString вывести %n?
Отправлено: andrew.k от Ноябрь 08, 2010, 13:38
Не во всех случаях проканает.

Я тоже с этим боролся, но потом стало ясно, что это и не нужно. Без этого можно легко обойтись.
Например, там где у тебя должен быть твой %n выводить его в последнюю очередь.
Либо еще вариант.
QString( "it's my percent string %%1" ).arg( <n> );
А чего проще не париться и использовать конкатенацию строк.
Еще почитай внимательнее про QString::arg( const QString &a1, const QString &a2, const QString &a3 ); и чем отличается от последовательного вызова arg().arg().arg()
Пример:
QString s("%1 %2 %3");
qDebug() << s.arg( "%1", "%2", "%3" );
qDebug() << s.arg( "%1" ).arg( "%2" ).arg( "%3" );

Вывод:
"%1 %2 %3"
"%3 %3 %3"

Почему так читай в ассистенте. Я уже и так много понаписал :)


Название: Re: [4.x.x] Как QString вывести %n?
Отправлено: Пантер от Ноябрь 08, 2010, 13:50
qDebug() << s.arg( "%1" ).arg( "%2" ).arg( "%3" );
Выведет
"%3 %2 %3"
Но это уже оффтоп. Задача решена. Т.е. доказано, что решение отсутствует.


Название: Re: [4.x.x] Как QString вывести %n?
Отправлено: andrew.k от Ноябрь 08, 2010, 17:43
qDebug() << s.arg( "%1" ).arg( "%2" ).arg( "%3" );
Выведет
"%3 %2 %3"
Но это уже оффтоп. Задача решена. Т.е. доказано, что решение отсутствует.
Ты бы скомпилил, да посмотрел прежде чем писать. Как это отсутствует? Я тебе пяток решений привел. Тебе больше подходит arg с несколькими параметрами. что за люди ассистант лень прочитать.


Название: Re: [4.x.x] Как QString вывести %n?
Отправлено: Пантер от Ноябрь 08, 2010, 17:48
QString s("%1 %2 %3");
qDebug() << s.arg( "%1" ).arg( "%2" ).arg( "%3" );
1. %1 заменится на %1.
2. %1 заменится на %2.
3. Первый %2 заменится на %3
Разве не так? Компилить лень, рассуждения логические.

И точно. Нить рассуждений оказалась неверной. :)

Мой пример был абстрактный. В конкретной задаче дело обстояло значительно сложнее. Т.е. о наличии в строчке всяких %n изначально не было известно.


Название: Re: [4.x.x] Как QString вывести %n?
Отправлено: andrew.k от Ноябрь 08, 2010, 18:26
QString s("%1 %2 %3");
qDebug() << s.arg( "%1" ).arg( "%2" ).arg( "%3" );
1. %1 заменится на %1.
2. %1 заменится на %2.
3. Первый %2 заменится на %3
Разве не так? Компилить лень, рассуждения логические.

И точно. Нить рассуждений оказалась неверной. :)

Мой пример был абстрактный. В конкретной задаче дело обстояло значительно сложнее. Т.е. о наличии в строчке всяких %n изначально не было известно.

Зачем этот пост, непонятно.