QRect не центрируется в виджете, хотя QCursor имеет тот же val?

#c #qt

#c #qt

Вопрос:

Я могу установить QCursor в центр GLWidget, даже если этот GLWidget находится внутри макета или разделителей. Однако я хочу нарисовать что-то в 2D с помощью QPainter вместо установки формы курсора — в центре экрана.

Я не могу выровнять QRect по центру экрана — то же значение помещает эллипс в правом нижнем углу GLWidget. Почему эти центральные координаты не работают в обоих случаях?

 void GLWidget::paintEvent(QPaintEvent *)
{
    if (selCam->camType->val_s == "fps")
    {
        QPoint p = mapFromGlobal(QCursor::pos());

        fpsCenter = mapToGlobal(QPoint(width() / 2, height() / 2));
        //fpsCenter = 738, 549 
        QCursor::setPos(fpsCenter);
    }

    //other rendering 

    if (selCam->camType->val_s == "fps")
    {
        QRect rectAim(10, 10, 20, 20);

        rectAim.moveCenter(fpsCenter);

        painter.setPen(Qt::black);
        painter.drawEllipse((rectAim));
    }
}
  

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

Ответ №1:

Я думаю, проблема в том, что вы используете глобальные координаты для художника, однако он должен использовать относительные координаты. Итак, вам нужно переместить свой прямоугольник в центр окна просмотра или вашего виджета, т. Е.:

 rectAim.moveCenter(rect().center());