5

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

问:我该怎么做?

ps NON 下面的函数不是这样做的。

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

2 回答 2

10

恐怕你不会满足于你的要求'左下必须是(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();
}

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

于 2013-08-31T19:31:03.810 回答
6

如果您只想在坐标中报告鼠标的位置,就好像小部件的左下角是 (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();
}
于 2013-09-02T15:50:28.800 回答