Если все, что вы хотите сделать, это сообщить положение мыши в координатах, как если бы нижний левый угол виджета был (0,0), а при восходящем направлении возрастал Y, то код ниже делает это. Я думаю, что причина желания такого кода ошибочна, так как координаты всего остального в указанном виджете не работают таким образом. Так почему ты хочешь этого, я не могу понять, но ты здесь.
#include <QApplication>
#include <QMouseEvent>
#include <QTransform>
#include <QLabel>
class Window : public QLabel {
public:
Window(QWidget *parent = 0, Qt::WindowFlags f = 0) : QLabel(parent, f) {
setMouseTracking(true);
setMinimumSize(100, 100);
}
void mouseMoveEvent(QMouseEvent *ev) {
// vvv That's where the magic happens
QTransform t;
t.scale(1, -1);
t.translate(0, -height()+1);
QPoint pos = ev->pos() * t;
// ^^^
setText(QString("%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();
}
Я знаю это, и то, что я хочу сделать, это преобразовать его в левый нижний угол. – Mike
Вы спросили об этом здесь: http://stackoverflow.com/questions/18551162/aligning-coordinate-systems. Это решение «сделай сам». Я предположил, что с этим вопросом вы попросили более простой способ Qt. Я должен вас разочаровать, я не знаю, как легко переключить Qt на свою систему координат. Вам придется делать преобразования координат самостоятельно. Если бы я был вами, я бы попытался жить с системой Qt. Просто переместить (0,0) из верхнего в нижний угол будет неслучайно повлиять на производительность вашей программы. – Greenflow
Хорошо, давайте рассмотрим, что верхний левый угол WIDGET равен (0,0). Это в любом случае дает неправильный результат. – Mike