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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [4.x.x] Как QString вывести %n?  (Прочитано 7402 раз)
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« : Ноябрь 08, 2010, 11:54 »

Возник вопрос. Есть такой код:
QString ("%1 %1").arg ("etc")
Вопрос в том, как заэскейпить первый %1, чтобы заменился второй? Поиск в ассистенте ничего не дал.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #1 : Ноябрь 08, 2010, 12:17 »

А вот такой вариант не подойдет?
Код
C++ (Qt)
QString("%1 %2").arg("%1", "etc")
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #2 : Ноябрь 08, 2010, 12:22 »

Неа. Нужно именно заэскейпить.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #3 : Ноябрь 08, 2010, 13:01 »

Разбором в данном случае будет заниматься findArgEscapes из QString. А судя по исходникам - тупо ищется % и следующий за ним символ (цифра). Похоже что в такой постановке задачи - никак.
P.S. Не прокатывает даже извращенный вариант QString("%\x31 %1)
« Последнее редактирование: Ноябрь 08, 2010, 13:07 от Hellraiser » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Ноябрь 08, 2010, 13:03 »

Прихожу к такому же выводу. ИМХО, баг это.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
zenden
Гость
« Ответ #5 : Ноябрь 08, 2010, 13:05 »

Можно попробовать вставить какой-нибудь невидимый символ между % и цифрой.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #6 : Ноябрь 08, 2010, 13:17 »

Не во всех случаях проканает.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
andrew.k
Гость
« Ответ #7 : Ноябрь 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"

Почему так читай в ассистенте. Я уже и так много понаписал Улыбающийся
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #8 : Ноябрь 08, 2010, 13:50 »

qDebug() << s.arg( "%1" ).arg( "%2" ).arg( "%3" );
Выведет
"%3 %2 %3"
Но это уже оффтоп. Задача решена. Т.е. доказано, что решение отсутствует.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
andrew.k
Гость
« Ответ #9 : Ноябрь 08, 2010, 17:43 »

qDebug() << s.arg( "%1" ).arg( "%2" ).arg( "%3" );
Выведет
"%3 %2 %3"
Но это уже оффтоп. Задача решена. Т.е. доказано, что решение отсутствует.
Ты бы скомпилил, да посмотрел прежде чем писать. Как это отсутствует? Я тебе пяток решений привел. Тебе больше подходит arg с несколькими параметрами. что за люди ассистант лень прочитать.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #10 : Ноябрь 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 изначально не было известно.
« Последнее редактирование: Ноябрь 08, 2010, 17:50 от Пантер » Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
andrew.k
Гость
« Ответ #11 : Ноябрь 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 изначально не было известно.

Зачем этот пост, непонятно.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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