Перемещение курсора на позицию кнопки Qt
Необходимо переместить курсор в позицию кнопки, использую следующий код:
connect(ui->startButton, &QPushButton::clicked, this, [this]()
{
ui->fixTimeButton->setHidden(false);
QCursor::setPos(mapToGlobal(ui->fixTimeButton->pos()));
ui->startButton->setEnabled(false);
});
После нажатия на кнопку Start, курсор перемещается, но не на точное положение кнопки (красная точка на картинке - положение курсора,черный квадрат - нужная кнопка). Откуда берется это смещение и как это исправить?
Ответы (1 шт):
Если кратко, то ответ:
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());
