2

Qtを使用するのはかなり新しいです。ボタンを押すと、そのボタンを押してウィジェット上のマウスの位置を見つける必要があるカスタムウィジェットがあります。残念ながら、現在 mousePressEvent(QMouseEvent *me) は正しく動作していないようです。だから私は正確に何が間違っているのか疑問に思っています.以下のコード;

ヘッダー ファイル:

#ifndef TILESHEETPANE_H
#define TILESHEETPANE_H

#include <QWidget>
#include "global.h"

class tileSheetPane : public QWidget
{
   Q_OBJECT

 public:
     tileSheetPane(int scnWidth, Global *global, QWidget *parent);

 protected:
     void mousePressEvent(QMouseEvent *me);
     void paintEvent(QPaintEvent *);

 private:
     Global *tempGlobal;
     QPoint cursorPos;
     int tileSheetPaneWidth, tileSheetPaneHeight, renderOffsetY;
 };

 #endif // TILESHEETPANE_H

ソースファイル:

   #include <QPainter>
   #include <QMouseEvent>
   #include "tilesheetpane.h"

   //Constructor & Paint Event .. 

   void tileSheetPane::mousePressEvent(QMouseEvent *me)
   {
        cursorPos = me->pos();
   }

CursorPos の値は、初期化された 0 を示しているだけです。ですから、どんな助けも大歓迎です :)、私が言ったように、QT の使用はおそらく 2 日前に始まったばかりなので、まだ物事を理解しようとしています :D.

編集; そのため、コメントでいくつかの提案を試した後、何も機能していないようです。私は確かに setMouseTracking(true) を持っていますが、まだ何もありません。提案どおりにqDebug呼び出しを関数に挿入しましたが、mousePressEventが呼び出されないようです。

 void tileSheetPane::mousePressEvent(QMouseEvent *me)
 {
     cursorPos = me->pos();

     //These Never Show Up!
     qDebug() << me->pos().x();
     qDebug() << me->pos().y();
 }

何かがこれが呼び出されるのをブロックまたは停止している可能性がありますが、それが何であるかわかりませんか?

4

3 に答える 3

0

マウスのクリックがうまくいかなかったので、Googleで検索した後、最終的に次のビデオを見つけました。 http://www.youtube.com/watch?v=E29KiTRYpjk

とにかく私のウィジェットはかなり小さいので、基本的にすべてをやり直しました。しかし、それは価値がありました。基本的に、古いファイルを削除し、Qt Designer フォームを作成し、新しいウィジェットを mainWindow.ui ファイルに追加し、「tileSheetPane」を使用するように昇格させました。それだけです。今では完璧に動作します:D.

于 2012-08-31T00:06:07.007 に答える
0

これを試して:

qDebug() << me->pos()->x();
于 2012-08-30T05:09:53.943 に答える
-1

QWidget-child-class のコンストラクターに追加しますsetMouseTracking(true);

これがないと、ウィジェットはマウスの位置を追跡しません。

MouseTrackingプロパティ ドキュメント

于 2012-08-30T20:06:55.647 に答える