Russian Qt Forum

Qt => Общие вопросы => Тема начата: Пантер от Август 26, 2009, 18:15



Название: Форматирование текста в QString
Отправлено: Пантер от Август 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
Как добиться желаемого результата?


Название: Re: Форматирование текста в QString
Отправлено: Rcus от Август 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.
А желаемого лучше добиваться другими методами, например таблицами без границ.


Название: Re: Форматирование текста в QString
Отправлено: Пантер от Август 26, 2009, 18:28
Не канает. Нужен вывод напрямую на принтер, т.е. через std::ofstream, так что хтмл не катит.


Название: Re: Форматирование текста в QString
Отправлено: crackedmind от Август 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"


правда, желаемый результат получится, только с моноширенным шрифтом


Название: Re: Форматирование текста в QString
Отправлено: SASA от Август 27, 2009, 12:04
Попробуй фориатировать табами.

Код:
QString("%1 \t\t\t %2 \t %3")


Название: Re: Форматирование текста в QString
Отправлено: Авварон от Август 27, 2009, 12:35
а разве QString.printf не работает как обычный принтф? там это делалось через %10d - вывести %d в 10 символах (если не вру)


Название: Re: Форматирование текста в QString
Отправлено: crackedmind от Август 27, 2009, 13:20
Какой еще printf? может sprintf? Но там же вся проблема в том что на вход подается Ascii символы, а не юникод.


Название: Re: Форматирование текста в QString
Отправлено: denka от Август 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.


О каком входе идет речь? :)