【问题标题】:QSpinBox not drawn correctlyQSpinBox 未正确绘制
【发布时间】:2013-02-25 04:57:46
【问题描述】:

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

不幸的是,它显示为:

如您所见,步骤按钮被绘制大量,并且仅出现向下箭头。有趣的是,按钮的宽度反映了第一个表格列的宽度,尽管 option.rect 是单元格的大小(这是正确的,这可能是正确绘制框架的原因)。

知道我没有提供哪些信息QStyle

【问题讨论】:

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


    【解决方案1】:

    在 qt-project 论坛上的 Jens 回答了这个问题,所以我将链接到它here

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

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

    【讨论】:

      猜你喜欢
      • 2016-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-09
      • 2011-03-11
      • 2017-10-02
      • 2011-09-07
      相关资源
      最近更新 更多