#c #qt #qt5 #drawing
#c #qt #qt5 #рисование
Вопрос:
У меня есть простое приложение Qt Widgets. Я вызываю update (rect) в mouseMoveEvent(). Я вызываю drawArc() и drawRect() в paintEvent(). Функция drawArc() рисует окружность немного меньше, чем rect, а drawRect() рисует событие->rect(). Они рисуются в положениях мыши с помощью mouseMoveEvent(). Поэтому я хочу иметь приложение, в котором круг и квадрат следуют за курсором. У меня есть такое приложение, но есть проблема. Круг и квадрат, кажется, нарисованы в правильном положении, но они каким-то образом обрезаны. Я даже увеличил прямоугольник обновления на 100 пикселей, но обрезка все еще там. Вы можете увидеть это на прикрепленном изображении. Код приведен ниже, а также на GitHub. Я использую Qt 5.15.1.
void ScribbleArea::mouseMoveEvent(QMouseEvent *event)
{
mousePos = event->pos();
int enlargement = 100;
int size = 129 enlargement;
QRect r = QRect(mousePos.x()-size/2,mousePos.y()-size/2,size,size);
update(r);
}
void ScribbleArea::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
int size = 129;
QRect arcRect = QRect(mousePos.x()-size/2,mousePos.y()-size/2,size,size);
painter.drawArc(arcRect,0,16*360);
painter.drawRect(event->rect().adjusted(10,10,-10,-10));
}
Весь код находится на GitHub: https://github.com/AlessandroFilipepi/QtDrawingExampleIssue (Не волнуйтесь, она короткая).
Спасибо за помощь.
Комментарии:
1. Что делать, если вы обновите весь виджет целиком, то есть вызовете
update()
функцию без параметров?2. Я попробовал это сделать. Это работает, но это неэффективно для моего реального приложения. Обновление всего виджета занимает слишком много времени.
3. Я думаю, проблема в том, что вы обновляете скорее текущую область, а не «предыдущую». Следовательно, вы получили эти остатки. Вы также можете попытаться расширить область обновления, если обновление всего виджета происходит медленно.
4. Я отредактировал свой вопрос и предоставил лучшее изображение. Остатки вызваны простотой кода. Это работает в моем реальном приложении. Я хочу знать, почему части нижнего и правого краев моей «кисти» обрезаны. На изображении он отмечен красным цветом.
5. Я могу подтвердить проблему с помощью MSYS Qt 5.15.2: imgur.com/a/J7ZnxiM