QSpinBox нарисован неправильно

В настоящее время я реализую пользовательский делегат, в части которого мне нужен QSpinBox быть нарисованным в paint(..) метод.

void Sy_floatingPointPD::paint( QPainter* painter,
const QStyleOptionViewItem& option,
const QModelIndex& index ) const
{
painter->save();

//  Paint check box.
QStyleOptionSpinBox spOpt;
spOpt.palette     = option.palette;
spOpt.rect        = option.rect;
spOpt.state       = option.state;
spOpt.frame       = true;
spOpt.stepEnabled = QAbstractSpinBox::StepUpEnabled |
QAbstractSpinBox::StepDownEnabled;

style->drawComplexControl( QStyle::CC_SpinBox, &spOpt, painter );

painter->restore();
}

К сожалению, это выглядит так:

Неисправность краски

Как вы можете видеть шаги кнопки нарисованы массивный и появляется только стрелка вниз. Интересно, что ширина кнопок отражает ширину первого столбца таблицы, несмотря на option.rect быть размером ячейки (что правильно, вероятно, поэтому рамка нарисована правильно).

Любые идеи, какую информацию я не даю QStyle?

1

Решение

Jens на форумах qt-project ответил на этот вопрос, так что я буду ссылаться на него Вот.

Короче говоря, в чертеже спин-бокса есть недостаток дизайна (по крайней мере, в QGtkStyle), когда он использует только размер из option.rect, игнорируя это положение. Хотя это совершенно разумно в «нормальном» сценарии рисования, потому что он отображается на источник виджета, он завершается неудачно при визуализации в представлении элемента из-за смещения ячейки.

Чтобы решить эту проблему, переместите option.rect к источнику виджета (т.е. переместите его верхний левый угол в (0,0)), а затем переведите QPainter учитывать смещение ячейки.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]