1

私がやろうとしていることは非常に簡単です。マウスがqgraphicsitemの上にあるときに、テキスト値を変更したいのです。後で、これを使用して、画像をクリックしたときにテキストをポップアップ表示したいと考えています (画像の情報など)。

これまでの私のコードは次のとおりです。

#include <QtGui/QApplication>
#include <QtGui/QGraphicsItem>
#include <QtGui/QGraphicsTextItem>
#include <QtGui/QGraphicsScene>
#include <QtGui/QGraphicsView>
#include <QtGui/QPixmap>

int main( int argc, char * * argv )
{
    QApplication      app( argc, argv );
    QGraphicsScene    scene;
    QGraphicsView     view( &scene );

    QGraphicsTextItem text( "this is my text");
    scene.addItem(&text);
    scene.setActivePanel(&text);
    text.setFlags(QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsFocusable);
    text.setAcceptHoverEvents(true);
    text.setAcceptTouchEvents(true);
    if (text.isUnderMouse() || text.isSelected()){
        text.setPlainText("test");
    }
    view.show();

    return( app.exec() );
}

ダブルクリック イベントを使用する人もいますが、私は使用しないことを望んでいました。

4

1 に答える 1

0

このコードブロック:

if (text.isUnderMouse() || text.isSelected()){
    text.setPlainText("test");
}

ビューが表示される前に、1回だけ実行されます。したがって、これはあなたが期待することをする可能性はまったくありません。

そのためには、もう少し作業を行う必要があります。つまり、のカスタムサブクラスを作成しQGraphicsTextItem、適切なイベントハンドラーをオーバーライドする必要があります。

ホバー時にテキストの変更を処理する方法は次のとおりです。

class MyTextItem: public QGraphicsTextItem
{
    public:
        MyTextItem(QString const& normal, QString const& hover,
                   QGraphicsItem *parent=0)
            : QGraphicsTextItem(normal, parent), normal(normal), hover(hover)
        {
        }

    protected:
        void hoverEnterEvent(QGraphicsSceneHoverEvent *)
        {
            setPlainText(hover);
        }
        void hoverLeaveEvent(QGraphicsSceneHoverEvent *)
        {
            setPlainText(normal);
        }
    private:
        QString normal, hover;

};

それをコードに追加し、text宣言を次のように変更します。

MyTextItem text("this is my text", "test");

そしてそれはあなたが期待することをするはずです。

于 2012-04-29T15:35:32.153 に答える