QGraphicsItemのスケーリング

一个新手
リリース: 2017-09-22 10:19:24
オリジナル
2126 人が閲覧しました


QGraphicsItem スケーリング

QgarphicsItem は、Qt ビュー システムの項目です。 QGraphicsItem 自体は、マウスのドラッグによるズームをサポートしていません。この記事では、マウス イベントを変更して項目のサイズを変更する方法について説明します。 (この記事で使用している Qt のバージョンは Qt4.8 です)

以下のコードで実装される機能は次のとおりです: Shift キーを押しながらマウスでドラッグすると、ボックスのサイズを変更できます。

クラス Box を定義する

class Box:public QGraphicsItem
{
    Q_DECLARE_TR_FUNCTIONS(Box)public:    
    Box();
    ...protected:    
    void mousePressEvent(QGraphicsSceneMouseEvent *event);    
    void mouseMoveEvent(QGraphicsSceneMouseEvent *event);    
    void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
};
ログイン後にコピー
Box::Box()
{
    setFlags(QGraphicsItem::ItemIsSelectable|
             QGraphicsItem::ItemIsMovable|
             QGraphicsItem::ItemSendsGeometryChanges|
             QGraphicsItem::ItemIsFocusable);       //接受键盘事件
    mBoundingRect = QRectF(0,0,100,100);
    mBoundingRect.translate(-mBoundingRect.center());
}
ログイン後にコピー

上記の 2 つのコードは、Box クラスの定義とコンストラクターの実装です。最も重要なことは、Box が実行できるようにするための 3 つのマウス関数のオーバーロードと setFlag です。キーボードイベントを受け入れます。

mousePressEventをオーバーロード

void Box::mousePressEvent(QGraphicsSceneMouseEvent *event)
{    if(event->modifiers()&Qt::ShiftModifier)
    {
        resizing = true;             //resizing变量在鼠标点击时变为true                                                    //在放开时变为false
        setCursor(Qt::SizeAllCursor);//鼠标样式变为十字
    }    else
        QGraphicsItem::mousePressEvent(event);
}
ログイン後にコピー

moveEventをオーバーロード

void Box::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{    if(resizing)
    {
        QRectF rect(mBoundingRect);        
        if(event->pos().x()<rect.x())
            rect.setBottomLeft(event->pos());        else
            rect.setBottomRight(event->pos());
        mBoundingRect=rect;
        mBoundingRect.translate(-mBoundingRect.center());
        scene()->update();
    }    else
        QGraphicsItem::mouseMoveEvent(event);
}
ログイン後にコピー

ここでは、マウスの位置と一致するようにBoxの左下隅と右上隅を更新するだけです。より良いアプローチは、x 座標と y 座標を別々に処理することです。

mouseReleaseEvent をオーバーロードします

void Box::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{    if(resizing)
    {
        resizing = false;
        setCursor(Qt::ArrowCursor);
    }    else
        QGraphicsItem::mouseReleaseEvent(event);
}
ログイン後にコピー

サイズ変更プロセス中にユーザーがマウスを放すと、サイズ変更が true に変更され、マウス スタイルが矢印に戻ります。

以上がQGraphicsItemのスケーリングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート