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

qt-projectフォーラムのJensがこの質問に答えたので、ここにリンクします。

つまり、スピンボックスの描画(少なくともQGtkStyle)には設計上の欠陥があり、その位置を無視して、のサイズのみを使用しますoption.rectこれはウィジェットの原点にマップされるため、「通常の」ペイントシナリオでは完全に合理的ですが、セルのオフセットが原因でアイテムビューにレンダリングすると失敗します。

これを解決するoption.rectには、ウィジェットの原点に移動し(つまり、左上隅を(0,0)に移動し)、QPainterセルオフセットを考慮してに変換します。

于 2013-03-10T10:42:59.083 に答える