crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Использование arg()
dsp
  опции профиля:
сообщение 10.2.2011, 5:30
Сообщение #1


Студент
*

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

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




Репутация:   0  


В одном из примеров приложений для создания надписи на кнопках используется такие строчки

     for (int i = 0; i < NumButtons; ++i) 
              {
                  buttons[i] = new QPushButton(tr("Button %1").arg(i + 1));
                  layout->addWidget(buttons[i]);
              }


Вопросы:

1) Правильно ли я понял, что функция arg() конвертирует числа в строки? И то значение, которое будет возвращено этой функцией передается в строку в .. %1 (как это называется %1? маркеры?).
2) "За символом '%' может следовать символ 'L', когда последовательность заменяется локализованным представлением a. " Вот это я совсем не понял.

Пример:

QLocale::setDefaultLocale(QLocale::English, QLocale::UnitedStates);
    str = QString("%1 %L2 %L3")
            .arg(12345)
            .arg(12345)
            .arg(12345, 0, 16);
    // str == "12345 12,345 3039"


не понял, как получаем 12,345 3039. И на что влияет 'L'

3) Так работает:
 buttons[i] = new QPushButton(tr("Button %1").arg(i + 1));
,

а вот так уже нет:

buttons[i] = new QPushButton(("Button %1").arg(i + 1));


tr() как я понял для удобства локализации. С ней "надпись становится как бы строкой и arg() все делает правильно"?

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 10.2.2011, 7:10
Сообщение #2


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

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

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




Репутация:   94  


Смотри описание этих функций. Их несколько перегруженных.


Цитата(dsp @ 10.2.2011, 7:30) *
а вот так уже нет:
Цитата(dsp @ 10.2.2011, 7:30) *
buttons[i] = new QPushButton(("Button %1").arg(i + 1));
здесь ("Button %1") является последовательностью char, а у этого типа нет никаких методов.
Цитата(dsp @ 10.2.2011, 7:30) *
tr() как я понял для удобства локализации. С ней "надпись становится как бы строкой...
не "как бы", QObject::tr(...) возвращает QString.

Если тебе не нужно переводить строку, то можешь её передать в конструктор QString(), для создания временного объекта.
Цитата
buttons[i] = new QPushButton(QString("Button %1").arg(i + 1));
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
dsp
  опции профиля:
сообщение 10.2.2011, 7:33
Сообщение #3


Студент
*

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

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




Репутация:   0  


Я читал про arg(), но из фразы ""За символом '%' может следовать символ 'L', когда последовательность заменяется локализованным представлением a" мне не понятно что такое локализованное представление.

А так, все понятно, спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 7.12.2023, 22:51