QT按钮按下小组件

时间:2012-08-30 03:11:27

标签: c++ qt

使用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

Src档案:

   #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();
 }

某些东西可能会阻止或阻止这个被调用,但我不确定它可能是什么?

3 个答案:

答案 0 :(得分:0)

试试这个:

qDebug() << me->pos()->x();

答案 1 :(得分:0)

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

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

答案 2 :(得分:-1)

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

如果没有这个,你的小部件就不会跟踪鼠标位置。

MouseTracking property documentation