Задача. На кнопке (QToolButton) будет выводиться надпись, например, такая:
" Call
$1.50"
В две строки.
Нужно вместо значка "$" выводить некоторый пиксмап (символ валюты).
Суть проблемы составляет то, что для этой кнопки используются стили. И кнопка должна быть отрисована с учетом этих стилей, задаваемых извне.
В итоге получился такой код.
C++ (Qt)
QStylePainter painter(this);
QStyleOptionToolButton opt;
initStyleOption(&opt);
opt.text = QString();
painter.drawComplexControl(QStyle::CC_ToolButton,opt);
QString val = pixmap_.isNull() ? value_ : value_.replace("$"," ");
opt.text = QString("%1\n%2").arg(name_).arg(val);
painter.drawControl(QStyle::CE_ToolButtonLabel,opt);
if(!pixmap_.isNull())
{
int shiftX = 0, shiftY = 0;
if (opt.state & (QStyle::State_Sunken | QStyle::State_On)) {
shiftX = style()->pixelMetric(QStyle::PM_ButtonShiftHorizontal, &opt, this);
shiftY = style()->pixelMetric(QStyle::PM_ButtonShiftVertical, &opt, this);
}
int X = (width() - opt.fontMetrics.width(val)) / 2;
painter.drawPixmap(X + shiftX - 2, height() / 2 + 6 + shiftY,pixmap_);
}
Он кривоват в плане нахождения позиции отрисовки значка.
Т.к. для отрисовки текста использую painter.drawControl(QStyle::CE_ToolButtonLabel,opt);
то сложно определить как он отрисует.
Поэтому хотелось бы функцию, которая бы рисовала одну строчку по заданным координатам с текущим стилем.
Т.е. чтобы результат был как у этой строчки.
Примеры, советы приветствуются.