在Qt中跟踪鼠标坐标

Mik*_*ike 4 c++ qt widget mouseevent mouse-coordinates

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

问:我怎么能这样做?

ps以下函数没有这样做.

widget->mapFromGlobal(QCursor::pos()).x();
QCursor::pos()).x();
event->x();
Run Code Online (Sandbox Code Playgroud)

Gre*_*low 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();
}
Run Code Online (Sandbox Code Playgroud)

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


Rei*_*ica 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();
}
Run Code Online (Sandbox Code Playgroud)