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

试试这个:

qDebug() << me->pos()->x();
于 2012-08-30T05:09:53.943 回答
0

所以我只是无法让鼠标点击工作,所以在谷歌上进行了一些搜索后,我最终找到了以下视频; http://www.youtube.com/watch?v=E29KiTRYpjk

由于我的小部件还是相当小,我基本上只是重新做了整个事情。但它是值得的。基本上我删除了我的旧文件,创建了一个 Qt 设计器表单,在我的 mainWindow.ui 文件中添加了一个新的小部件,将它提升为使用“tileSheetPane”,就是这样。现在完美运行:D。

于 2012-08-31T00:06:07.007 回答
-1

在 QWidget-child-class 的构造函数中添加setMouseTracking(true);

没有这个,您的小部件将不会跟踪鼠标位置。

MouseTracking财产文件

于 2012-08-30T20:06:55.647 回答