QPainterPath의 드로잉 알고리즘을 어떻게 커스터마이징 할 수 있습니까?QWidget에서 QPaintPath 드로잉 알고리즘 사용자 정의
시각적 요소 만 그림으로써 앱 속도를 높이고 싶습니다.
나는 QPainterPath에서 실시간 그래프 그리기 오전이 일을하고 싶습니다 : QPainterPath의 왼쪽 눈에 보이는 요소의
- 이진 검색을.
- QPainterPath의 맨 오른쪽 보이는 요소의 이진 검색.
- 보이는 요소 만 그립니다.
내 QWidget의 QPaintEngine을 QWidget::paintEngine()
을 통해 사용자 지정해야한다고 생각합니다.
그러나 QPaintEngine::drawPath(...)
기본 구현 does nothing.
맞습니까?
UPDATE : respounce, Koying에 대한
감사합니다.
이 난 그냥이 방법을 tryed했습니다
int minIndex = BinarySearchForMatchOrGreat(path, beginOffset);
int maxIndex = BinarySearchForMatchOrGreat(path, endOffset);
QPainterPath newPath;
for (int i = minIndex; i < maxIndex; i++)
{
const QPainterPath::Element & element = path.elementAt(i);
newPath.moveTo(element.x, element.y);
}
painter.drawPath(newPath);
모든 좋은 작품! 모든 요소 수에 대한 시간 오버 헤드가 고정되어 있습니다.
내 코드의 속도를 높이기위한 제안이 있으십니까?
UDPATE :
QPainterPath을 읽고 다른 스레드에서에 요소를 추가하는 동안 오류가 있습니다. 호출 스택에 때때로 응용 프로그램이 충돌!!의
QtCored4.dll qt_message_output (QtMsgType MSGTYPE, CONST의 char * 버피) 라인 2240 C++ QtCored4.dll qt_message (QtMsgType MSGTYPE, CONST의 char *의 MSG, 숯불 * AP = 연합 뉴스) 라인 2298 + 0x12 바이트 C++ QtCored4.dll! qFatal (const char * file, int line) Line 1999 + + 0x12 bytes C++ QtCored4.dll! qt_assert (const char * assertion, const char * 0x16 bytes C++ QtGuid4.dll! QPainterPath :: elementAt (int i) 405 + 0x36 바이트 C++ MyPlot.dll! MyPlot :: paintEvent (QPaintEvent * event) 줄 172 + 0x13 바이트 C++
elementAt (i)를 호출하는 동안 i == 4303이고 5459 개의 요소가 있습니다.
어쩌면 요소 수는 충돌 순간에 진짜가 아니겠습니까?
첫 번째 스레드가 충돌하는 동안 두 번째 스레드가 요소 수를 수정할 수 있습니까?
내 스레드 작동 방식 : 내 GUI 스레드는 읽기 전용 방법 만 사용합니다. 두 번째 스레드가 초당 1-5 천 개를 추가합니다.
또는 동작을 수정하려면 QPainterPath에서 서브 클래 싱해야합니까? – k06a
QPainterPath가 반복되는 동안 다른 스레드에서 QPainterPath가 수정되면 문제가 발생할 것입니다 ... 뮤텍스를 추가해야합니다 – Koying
"반복"을 의미합니까? elementAt() 및 elementCount() 메서드 만 사용합니다 ... – k06a