在Qt中跟踪鼠标坐标

时间:2013-08-31 18:17:39

标签: c++ qt widget mouseevent mouse-coordinates

假设我在主窗口中有一个小部件,并且想要仅在小部件上跟踪鼠标位置:这意味着小部件的左下角必须是本地的(0,0)。

问:我怎么能这样做?

P.S。以下功能没有这样做。

widget->mapFromGlobal(QCursor::pos()).x();
QCursor::pos()).x();
event->x();

2 个答案:

答案 0 :(得分:8)

我担心,你不满意你的要求'左下方必须是(0,0)。在Qt中,坐标系(0,0)在左上角。如果你能接受的话。以下代码......

setMouseTracking(true); // E.g. set in your constructor of your widget.

// Implement in your widget
void MainWindow::mouseMoveEvent(QMouseEvent *event){
    qDebug() << event->pos();
}

...将为您提供小部件中鼠标指针的坐标。

答案 1 :(得分:5)

如果您要做的只是报告鼠标在坐标中的位置,就好像小部件的左下角是(0,0)而Y在上升时是升序,那么下面的代码就可以了。我认为想要这样的代码的原因是错误的,因为所述小部件中的所有其他内容的坐标不能以这种方式工作。那么你为什么要这样,我无法理解,但是你走了。

#include <QtWidgets>

class Window : public QLabel {
public:
    Window() {
        setMouseTracking(true);
        setMinimumSize(100, 100);
    }
    void mouseMoveEvent(QMouseEvent *ev) override {
        // vvv That's where the magic happens
        QTransform t;
        t.scale(1, -1);
        t.translate(0, -height()+1);
        QPoint pos = ev->pos() * t;
        // ^^^
        setText(QStringLiteral("%1, %2").arg(pos.x()).arg(pos.y()));
    }
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Window w;
    w.show();
    return a.exec();
}