質問

私は新しいJava / Qtプログラマーであり、私はJavaとQt Jambiを使用してGUIを構築しようとしています。

私はラベルの中にピックスマップを置き、それは良く機能しますが、ラベルの内側のピックスマップをクリックするとイメージ座標を取得する必要があります。QWIDGET座標は必要ありません。クリックされたポイントの画像上に作業するピックスマップ座標が必要です。

mousepressevent イベントをオーバーライドする必要があると思いますが、 "Pixmap OnClick"に添付する方法はわかりません。

あなたは私を簡単な例にしてくださいか?

私は正しい方法で私の問題を説明したことを願っています、私の英語は素晴らしいではない、すみません!

役に立ちましたか?

解決

MousePressEventイベントを上書きする必要があると思いますが、「PIXMAP ONCLICK」に接続する方法はわかりません。

イベントやシグナルを混同しているようです。前者はqeventで、後者は信号です。あなたが必要なものは前者です、そしてあなたは後者を必要としません。

Qlabelクラスをサブクラス化し、C ++を書くときにこのようなものを書く必要があります(JavaではQt Jambiではありませんが、疑似コードとして取ることができます)。

#include <QLabel>
#include <QPoint>
#include <QMouseEvent>

class MyLabel : public QLabel
{
    Q_OBJECT
    public:
        MyLabel(QObject *parent) : QLabel(parent)

     ...

     protected:
         void QWidget::mousePressEvent(QMouseEvent * event)
         {
             ...
             QPoint localPosition = event.pos();
             // Work on the desired point
             ...
         }
};
.

だから、ユースケースに応じて、これらの方法の文書を調べる必要があります。

void qwidget :: MousePressEvent(QMouseEvent *イベント)[仮想保護]

このイベントハンドラ、イベントイベントの場合は、ウィジェットのマウスプレスイベントを受信するためにサブクラスで再実装できます。

MousePressEvent()で新しいウィジェットを作成する場合、MousereleaseEvent()は、基盤となるウィンドウシステム(またはX11ウィンドウマネージャ)、ウィジェットの場所、そしておそらくより多くの場合、期待されることがあります。

デフォルトの実装は、ウィンドウの外側をクリックしたときにポップアップウィジェットのクローズを実装しています。他のウィジェットタイプの場合はそれは何もしません。

これはQT 4と連携するローカルポジションを取得する方法です。浮遊物などでより高い精度が必要な場合は、localpos()またはQT 5で導入されたその他の方法を検討することをお勧めします。

Qpoint QmouseEvent :: pos()const

イベントを受けたウィジェットを基準にしたマウスカーソルの位置を返します。

マウスイベントの結果としてウィジェットを移動する場合は、globalpos()によって返されたグローバル位置を使用して、振とう動作を回避してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top