Qt — перемещение QGraphicsItem вызывает артефакты. Оставляет позади

Когда я перемещаю QGraphicsItem, странные артефакты остаются позади. Некоторые части элемента не отображаются, другие отображаются... В note.cpp у меня есть форма

QPainterPath Note::shape()const{
   QPainterPath path;
   //    path.addRect(0, 0, 50, 20);
   path.moveTo(0, -80.0);
   path.lineTo(0.0, 80.0);
   path.lineTo(80.0, 0.0);
   //    path.lineTo(75.0, -30.0);
   path.closeSubpath();
   return path;
}

В функции рисования

QPointF *points = new QPointF[3];
points[0] = QPointF(0,-80);
points[1] = QPointF(0,80);
points[2] = QPointF(80,0);
painter->drawPolygon(points,3);

enter image description hereenter image description here Первое изображение показывает, что все в порядке, когда я запускаю приложение. На втором рисунке показано, что когда я перемещаю треугольник с помощью мыши, он разрезается. В других случаях он оставляет некоторые следы и не отображает все части треугольника. Вот ссылка на гитхаб проекта. Ссылка на гитхаб

Чтобы воспроизвести, просто переместите треугольник.

3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
1
0
276
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

QGraphicsItem для эффективности перекрашивайте только часть, которая возвращает метод boundingRect(), в вашем случае QRect(0, 0, 80, 80) возвращает только половину необходимой области, так как координата (0, -80) находится за пределами boundingRect. Решение:

QRectF Note::boundingRect() const {
    return QRectF(0, -80, 80, 160) ;
    // or
    // return shape().boundingRect();
}

Да, вы правы. Мне нужно указать x, y (происхождение) моей формы, ширину и высоту. Спасибо.

kostas petsis 23.05.2019 16:48

Другие вопросы по теме