0

QWidgetカーソルが画像上にあるときにカーソルの座標を表示したいのですが、を使用するのが最善の方法であると読みましたQLineEditが、それを使用する方法が見つかりませんでした。QLineEditカーソルに追従するために、どのように開始し、どのように表示するのですか? PS:ポイント座標を設定する方法を知っています。これが私がやっている方法です:

void QImageWidget::mouseMoveEvent( QMouseEvent *event ){
   int x = event->pos( ).x();
   int y = event->pos( ).y();
   if( cursorLineEdit != NULL && cursorLineEdit->isEnabled( ) )
       cursorLineEdit->setText( QString( "[ %1 , %2 ]" ).arg( x ).arg( y ) );
}

mouseTracking はすでに true に設定されています:

this->setMouseTracking(true);

ありがとう !

EDIT : cursorLineEdit は、表示したい QLineEdit です。QWidget コンストラクターで初期化する必要がありますが、方法がわかりません。

4

2 に答える 2

1

もう1つの解決策を見つけましたが、まず最初に、なぜここに回答を投稿することにしたのかをお話ししたいと思います。私のソリューションは効率的ではなく、CPU の負荷が非常に高いと思いましたが、vahancho のコードを実行すると、QToolTip も CPU を負荷することがわかりました (私のコンピューターでは、両方のソリューションが CPU を 0 から 3% 負荷できます)。何を使用するかを決めることができます。

アイデア: 位置を取得し、透明なピックスマップを作成し、このピックスマップ座標に描画し、このピックスマップをカーソルとして設定します。さらに、bool 変数を 1 つ使用します (pixmap を mouseMoveEvent ごとに描画するのではなく、(効率のために) 2 回ごとに描画します)。

bool showMustGoOn;//in header

showMustGoOn = false;//in constructor

void QImageWidget::mouseMoveEvent(QMouseEvent *event)
{
    if(showMustGoOn)
    {
    const QPoint &p = event->pos();
    QPixmap px(50,10);
    px.fill(Qt::transparent);
    QPainter paint(&px);
    paint.drawText(10,10,QString("%1,%2").arg(p.x()).arg(p.y()));
    setCursor(QCursor(px));
    showMustGoOn = false;
    }
    else
    {
        showMustGoOn = true;
    }
}

使いたい場合は、別のものを描いてカーソルを表示できます。もう1つの利点は、ピックスマップが透明であるため、このカーソルは別の領域を閉じないことです(数字だけが表示され、他の領域はすべて透明ですが、ツールチップは閉じます)。

最後に、Qwt にも似たようなものがあり、より効率的だと思いますが、Qwt のソース コードで必要なコードを検索するのは非常に長く複雑になる可能性があります。

ここに画像の説明を入力

于 2014-08-20T17:24:53.600 に答える