我目前正在实现一个自定义委托,其中一部分需要在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什么信息
发布于 2013-03-10 10:42:59
在qt项目论坛上的Jens回答了这个问题,所以我将链接到它这里。
简而言之,旋转盒绘图中存在一个设计缺陷(至少在QGtkStyle中是这样),它只使用option.rect的大小,而忽略了它的位置。虽然这在“正常”绘制场景中完全合理,因为它映射到小部件原点,但由于单元格偏移,它在item视图中呈现时会失败。
要解决这个问题,请将option.rect移动到小部件原点(即将其左上角移动到(0,0)),然后将QPainter转换为考虑到单元格偏移量。
https://stackoverflow.com/questions/15314482
复制相似问题