Вывод координат возле курсора

94
08 февраля 2021, 23:40

Пытаюсь выводить координаты XY возле курсора мыши. С самим просчетом координат все норм, но вот с расположение текста проблема. Не могу никак расчитать положение курсора и расположить рядом с ним текст.

bool MainWindow::eventFilter(QObject *object, QEvent *event)
{
    //Вывод координат возле курсора
    if(object == ui->chart1)
    {
        if(event->type() == QEvent::MouseMove)
        {
            QMouseEvent* mouse_event = dynamic_cast<QMouseEvent*>(event);
            if( mouse_event->pos().x() < 30 || mouse_event->pos().y() > (ui->chart1->height() - 30) )
            {
                Coordinates->setVisible(false);
                ui->chart1->replot();
            }
            else {
                double x, y;
                x = int(this->ui->chart1->xAxis->pixelToCoord(mouse_event->pos().x()));
                y = int(this->ui->chart1->yAxis->pixelToCoord(mouse_event->pos().y()));
                QPoint coord;
                coord.setX(int( x + 80 ));
                coord.setY(int( y + 220 ));

                Coordinates->setText(QString::number(x) + ":" + QString::number(y));
                Coordinates->setVisible(true);
                Coordinates->position->setCoords(coord);
                ui->chart1->replot();
            }
            return false;
        }
    }
}

щас вывод производится но неправильно: т.к. если менять масштаб то текст с координатами уезжает ....: Заранее спасибо!

РЕШЕНИЕ

QPoint coord;
coord.setX(int( x + (ui->chart1->xAxis->pixelToCoord(40) - ui->chart1->xAxis->pixelToCoord(0)) ));
coord.setY(int( y + (ui->chart1->yAxis->pixelToCoord(-20) - ui->chart1->yAxis->pixelToCoord(0)) ));
Answer 1

Вы смещаете лейбл в координатах графика, а надо в пикселях. Из-за этого при зумировании надпись съезжает. В строке

    coord.setX(int( x + 80 ));

Вместо + 80 надо написать что-то типа (псевдокод):

    coord.setX(int( x + (pixelsToCoord(80) - pixelsToCoord(0))));

Где 80 это расстояние в пикселях от точки курсора до надписи, а конструкция (pixelsToCoord(80) - pixelsToCoord(0)) это длина смещения в реальных координатах графика. Это обеспечит вам одинаковое смещение при любом зуме.

READ ALSO
Как упаковать проект в один exe-файл?

Как упаковать проект в один exe-файл?

У меня есть проект в Visual Studio, в котором я подключаю библиотеки OpenGLСтолкнулся с необходимостью запаковать его вместе со всеми текстурами и библиотеками...

109
Неправильно подключается jQuery через Webpack

Неправильно подключается jQuery через Webpack

В одном из своих модулей импортировал jQuery:

144
Позиционирование блоков div

Позиционирование блоков div

Есть таблица из блоковСтроки добавляются как надо, но при попытке добавить ещё один блок, нижняя строка не смещается, а находит на блок

130
Нужно поднять блок с картинками CSS,HTML,Bootstrap3

Нужно поднять блок с картинками CSS,HTML,Bootstrap3

хочу поднять блок с картинками регистрации и логина на 50 пикселей в верхно при использовании margin-top:50px; не работает почему хз

84