QSpinBox绘制不正确

时间:2013-03-09 18:42:06

标签: c++ qt model-view-controller qt4.8 qstyle

我目前正在实施自定义委托,其中一部分我需要在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();
}

不幸的是,它显示为:

Paint failure

正如您所见,步骤按钮是大量,只显示向下箭头。有趣的是,按钮的宽度反映了第一个表格列的宽度,尽管option.rect是单元格的大小(这是正确的,这可能是为什么正确绘制框架)。

任何想法我不会提供哪些信息QStyle

1 个答案:

答案 0 :(得分:0)

jens over the qt-project论坛回答了这个问题,所以我会链接到here

简而言之,旋转框图中存在一个设计缺陷(至少在QGtkStyle中),它只使用option.rect尺寸,忽略它的位置。虽然这在“普通”绘画场景中完全合理,因为它映射到窗口小部件原点,但由于单元格偏移而在项目视图中渲染时会失败。

要解决此问题,请将option.rect移至窗口小部件原点(即将其左上角移至(0,0)),然后翻译QPainter以考虑单元格偏移。< / p>