Я создаю инструмент выделения типа выделения в QWidget, и все работает нормально, за исключением ошибки рендеринга при перетаскивании области.Если я вызываю update без каких-либо аргументов, все работает прекрасно, но если я вызываю update, чтобы включить только область выделения, когда пользователь перетаскивает, то два края обрезаются, если мышь движется с умеренной скоростью.
Вот изображение того, как оно выглядит при перетаскивании в нижний правый угол:
Снимок экрана при перетаскивании в виджете
Я думалзамена update () на repaint () может исправить это, но это тоже не сработало.
Как правильно мне это делать?Я включил очень простой код, который демонстрирует проблему.
#include <QPainter>
#include <QPaintEvent>
#include <QWidget>
class Widget : public QWidget
{
public:
Widget(QWidget *parent = nullptr)
: QWidget(parent)
{
}
void mousePressEvent(QMouseEvent *e) override
{
startPt = e->pos();
rect = QRect();
update(); // clear the entire widget
}
void mouseMoveEvent(QMouseEvent *e) override
{
rect = QRect(startPt, e->pos()).normalized();
update(rect.adjusted(-2,-2,2,2)); // adjusted to include stroke
}
void paintEvent(QPaintEvent *event) override
{
QPainter p(this);
p.setBrush(Qt::NoBrush);
p.setPen(QPen(Qt::black, 2));
p.drawRect(rect);
}
private:
QRect rect;
QPoint startPt;
};