1

我目前正在实现一个自定义委托,其中一部分我需要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

4

1 回答 1

0

Jens 在 qt-project 论坛上回答了这个问题,所以我会在这里链接到它。

简而言之,旋转框绘图(至少在 QGtkStyle 中)存在设计缺陷,它只使用 的大小option.rect而忽略了它的位置。尽管这在“正常”绘画场景中是完全合理的,因为它映射到小部件原点,但由于单元格偏移,它在项目视图中呈现时会失败。

要解决此问题,请移动option.rect到小部件原点(即,将其左上角移动到 (0,0)),然后平移QPainter以考虑单元格偏移。

于 2013-03-10T10:42:59.083 回答