Tracking mouse coordinates in Qt

后端 未结 2 1725
日久生厌
日久生厌 2021-01-06 04:49

Let\'s say I have a widget in main window, and want to track mouse position ONLY on the widget: it means that left-low corner of widget must be local (0, 0).

Q: How

相关标签:
2条回答
  • 2021-01-06 05:27

    I am afraid, you won't be happy with your requirement 'lower left must be (0,0). In Qt coordinate systems (0,0) is upper left. If you can accept that. The following code...

    setMouseTracking(true); // E.g. set in your constructor of your widget.
    
    // Implement in your widget
    void MainWindow::mouseMoveEvent(QMouseEvent *event){
        qDebug() << event->pos();
    }
    

    ...will give you the coordinates of your mouse pointer in your widget.

    0 讨论(0)
  • 2021-01-06 05:46

    If all you want to do is to report position of the mouse in coordinates as if the widget's lower-left corner was (0,0) and Y was ascending when going up, then the code below does it. I think the reason for wanting such code is misguided, though, since coordinates of everything else within said widget don't work this way. So why would you want it, I can't fathom, but here you go.

    #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();
    }
    
    0 讨论(0)
提交回复
热议问题