В настоящее время я реализую пользовательский делегат, в части которого мне нужен 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
?
Jens на форумах qt-project ответил на этот вопрос, так что я буду ссылаться на него Вот.
Короче говоря, в чертеже спин-бокса есть недостаток дизайна (по крайней мере, в QGtkStyle), когда он использует только размер из option.rect
, игнорируя это положение. Хотя это совершенно разумно в «нормальном» сценарии рисования, потому что он отображается на источник виджета, он завершается неудачно при визуализации в представлении элемента из-за смещения ячейки.
Чтобы решить эту проблему, переместите option.rect
к источнику виджета (т.е. переместите его верхний левый угол в (0,0)), а затем переведите QPainter
учитывать смещение ячейки.
Других решений пока нет …