假设我在主窗口中有一个小部件,并且只想在小部件上跟踪鼠标位置:这意味着小部件的左下角必须是本地的 (0, 0)。
问:我该怎么做?
ps NON 下面的函数不是这样做的。
widget->mapFromGlobal(QCursor::pos()).x();
QCursor::pos()).x();
event->x();
假设我在主窗口中有一个小部件,并且只想在小部件上跟踪鼠标位置:这意味着小部件的左下角必须是本地的 (0, 0)。
问:我该怎么做?
ps NON 下面的函数不是这样做的。
widget->mapFromGlobal(QCursor::pos()).x();
QCursor::pos()).x();
event->x();
恐怕你不会满足于你的要求'左下必须是(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();
}
...将为您提供小部件中鼠标指针的坐标。
如果您只想在坐标中报告鼠标的位置,就好像小部件的左下角是 (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();
}