2013-03-09 5 views
1

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

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(); 
} 

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

Paint failure

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

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

ответ

0

Йенс на форумах qt-проекта ответил на этот вопрос, поэтому я свяжусь с ним here.

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

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

Смежные вопросы