Russian Qt Forum
Июнь 10, 2024, 11:50 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Форматирование текста в QString  (Прочитано 16041 раз)
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« : Август 26, 2009, 18:15 »

Нужно выводить форматированный текст на принтер или монитор. Форматирование под собой подразумевает текст в 3 колонки, т.е. что-то типа
Код:
Зарплата                           3500р.   01/2009
Отпускные                          250р.   02/2009
Пытался сделать так:
QString("%1 %2р. %3").arg(str0, 20).arg(value0, 5).arg(date0, 7)
Но получается вот так
Код:
                         Зарплата  3500р.   01/2009
                        Отпускные  250р.   02/2009
Как добиться желаемого результата?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Rcus
Гость
« Ответ #1 : Август 26, 2009, 18:18 »

Цитировать
QString QString::arg ( const QString & a, int fieldWidth = 0, const QChar & fillChar = QLatin1Char( ' ' ) ) const

Returns a copy of this string with the lowest numbered place marker replaced by string a, i.e., %1, %2, ..., %99.

fieldWidth specifies the minimum amount of space that argument a shall occupy. If a requires less space than fieldWidth, it is padded to fieldWidth with character fillChar. A positive fieldWidth produces right-aligned text. A negative fieldWidth produces left-aligned text.
А желаемого лучше добиваться другими методами, например таблицами без границ.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #2 : Август 26, 2009, 18:28 »

Не канает. Нужен вывод напрямую на принтер, т.е. через std::ofstream, так что хтмл не катит.
Записан

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

Код:
    QString value0 = "200 rub";
    QString value1 = "3500 rub";
    QString str0 = "vacation pay";
    QString str1 = "salary";
    QString date0 = "01/2009";
    QString date1 = "02/2009";
    qWarning() << QString("%1 %2 %3").arg(str0, -20).arg(value0, -8).arg(date0, -7);
    qWarning() << QString("%1 %2 %3").arg(str1, -20).arg(value1, -8).arg(date1, -7);

Вывод:

"vacation pay         200 rub  01/2009"
"salary               3500 rub 02/2009"


правда, желаемый результат получится, только с моноширенным шрифтом
« Последнее редактирование: Август 27, 2009, 04:20 от crackedmind » Записан
SASA
Гость
« Ответ #4 : Август 27, 2009, 12:04 »

Попробуй фориатировать табами.

Код:
QString("%1 \t\t\t %2 \t %3")
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #5 : Август 27, 2009, 12:35 »

а разве QString.printf не работает как обычный принтф? там это делалось через %10d - вывести %d в 10 символах (если не вру)
Записан
crackedmind
Гость
« Ответ #6 : Август 27, 2009, 13:20 »

Какой еще printf? может sprintf? Но там же вся проблема в том что на вход подается Ascii символы, а не юникод.
Записан
denka
Гость
« Ответ #7 : Август 27, 2009, 13:28 »

Цитировать
QString & QString::sprintf ( const char * cformat, ... )
Safely builds a formatted string from the format string cformat and an arbitrary list of arguments.
The %lc escape sequence expects a unicode character of type ushort (as returned by QChar::unicode()). The %ls escape sequence expects a pointer to a zero-terminated array of unicode characters of type ushort (as returned by QString::utf16()).
Note: This function expects a UTF-8 string for %s.


О каком входе идет речь? Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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