Перемещение курсора на позицию кнопки Qt

Необходимо переместить курсор в позицию кнопки, использую следующий код:

connect(ui->startButton, &QPushButton::clicked, this, [this]()
    {
        ui->fixTimeButton->setHidden(false);
        QCursor::setPos(mapToGlobal(ui->fixTimeButton->pos()));
        ui->startButton->setEnabled(false);
    });

После нажатия на кнопку Start, курсор перемещается, но не на точное положение кнопки (красная точка на картинке - положение курсора,черный квадрат - нужная кнопка). Откуда берется это смещение и как это исправить?

введите сюда описание изображения


Ответы (1 шт):

Автор решения: Sergey Tatarincev

Если кратко, то ответ:

QCursor::setPos(ui->tab->mapToGlobal(ui->fixTimeButton->pos())); // считаем что "Tab1" называется tab

А теперь детальнее.

Читаем маны по QWidget

QPoint QWidget::mapToGlobal(const QPoint &pos) const Translates the widget coordinate pos to global screen coordinates.

Т.е. QWidget::mapToGlobal возвращает глобальные экранные координаты для чилдрена этого самого QWidget.

Если бы ваш fixTimeButton располагался непосредственно на форме, ваш код бы сработал, но кнопка находится на вкладке, вкладка в табвиджете. Это и есть ваше смещение.. Т.е.

    // Ваш вариант
    qDebug()<<mapToGlobal(ui->pushButton->pos()); // Запись аналогична this->mapToGlobal(...)
    // Правильный вариант
    qDebug()<<ui->tab->mapToGlobal(ui->pushButton->pos());
    // А теперь посмотрим на сколько вы ошиблись
    qDebug()<<ui->tab->mapToGlobal(ui->pushButton->pos())-mapToGlobal(ui->pushButton->pos());
→ Ссылка