0

GUIでQGraphicsSceneインスタンスをQGraphicsViewに設定し、スクロールバーを有効にしてフルビューポートを更新しました。しかし、グラフィックビューをスクロールすると、qgraphicsシーンに追加されたアイテムが、コードに正しく追加され、スクロール時に表示されることが期待されているにもかかわらず、ある時点で消えてしまいます(QGraphicsItemから継承されたカスタムクラス):

  class CSquare : public QObject, public QGraphicsItem

paintメソッドは次のように実装されます。

void CSquare::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    static int sz;
    painter->setFont(fnt_);
    painter->fillRect(this->r,this->br);
    painter->drawRect(this->r);
    //painter->drawText(this->p,this->txt);
    if (txt == "")
        return;
    if (fnt_.pixelSize()>0)
        sz = fnt_.pixelSize();
    else
        if (fnt_.pointSize()>0)
            sz = fnt_.pointSize();
        else
            if (fnt_.pointSizeF()>0)
                sz = fnt_.pointSizeF();

    switch (this->al_flag)
    {
    case 1:
        painter->drawText(this->p.x(),this->p.y(),sz*txt.size(),2*sz,Qt::AlignRight,this->txt);
        break;
    case 2:
        //painter->drawText(this->r,Qt::AlignLeft,this->txt);
        painter->drawText(this->p.x(),this->p.y(),sz*txt.size(),2*sz,Qt::AlignLeft,this->txt);
        break;
    case 3:
        //painter->drawText(this->r,Qt::AlignCenter,this->txt);
        painter->drawText(this->p.x(),this->p.y(),sz*txt.size(),2*sz,Qt::AlignCenter,this->txt);
        break;
    case 4:
        //painter->drawText(this->r,Qt::AlignJustify,this->txt);
        painter->drawText(this->p.x(),this->p.y(),sz*txt.size(),2*sz,Qt::AlignJustify,this->txt);
        break;
    }
}

このビデオスクリーンキャストでアプリケーションを実行すると、それらがどのように消えるかを確認できます。

https://www.box.com/s/h4h94×1avgay1crzvyzx

誰かが問題の内容、グラフィックアイテムがビューに表示されないように解決する方法を教えてもらえますか?

前もって感謝します。

4

1 に答える 1

1

うん、ごめんなさい。問題はすでに解決されています: 問題は継承されたクラスのカスタム関数にありました:

QRectF boundingRect() const;

それは有効な長方形を返すはずです。今、私は自分のプロジェクトでそれを修正し、ビデオを削除します。

ご清聴ありがとうございました。

于 2013-02-19T14:27:10.497 に答える