2011-08-05 2 views
1

현재 일정에서 발생하는 이벤트의 병렬 목록을 편집하는 응용 프로그램을 만들고 있습니다. 모델/백엔드에는 하위 목록에 모든 항목이 순서대로있는 목록 목록이 있습니다.글립 문자가 x와 y 좌표를 갖는 여러 줄의 글립/텍스트가 병렬로 구성된 GUI를 만드는 방법

각 이벤트는 문자열/글리프 (ttf 글꼴로 표시)로 표시되어야하며 각 텍스트 줄은 텍스트가 표시되는 방식을 약간 변경하여 일반 텍스트 줄처럼 편집해야합니다. 이 사진을 봐 :

Example

기본적으로 각 라인은 한 줄의 텍스트를 나타냅니다. 각 이벤트는 단일 문자/글리프입니다. 그래서 그 텍스트 편집기?! 그렇진

  1. 더 바꿈 병렬
  2. 에서
  3. 여러 줄이 없습니다 각각의 그래프는 (X 방향)이
  4. 각 글리프는 "최대"이동 및 "아래로"할 수 있습니다 후 개별 공간이 (가장 중요한 포인트 일 수도 있습니다.)
  5. 글리프를 삭제하면 오른쪽에있는 모든 항목에 대해 "왼쪽"으로 이동하여 간격을 좁 힙니다 (일반 텍스트 편집기와 마찬가지로).
  6. 글리프를 삽입하면 그 오른쪽에있는 모든 항목에 "오른쪽"단계로 이동하여 삽입 할 간격을 만듭니다.

이러한 대부분의 점은 QGraphicsLinearLayout에 포함되지만이 방법에 대한 잘못된 위젯/레이아웃 일 수 있습니다. 조언 있니?

+0

우리가 여기서 말하는 치수에 대한 정보를 제공해 주시겠습니까? 15 개의 이벤트가있는 5 개의 라인? 5000 개의 이벤트가있는 100 개의 라인? – Exa

+0

@Exa 물론 그렇습니다. 사용자 선택 이후 실제로 예측할 수는 없지만 여기에는 상식이 있습니다. 어쨌든 하한선은 문제가되지 않으므로 (성능상 현명한) 일반적인 상위 경계는 약 150 줄입니다. 수백에서 약 5k 개의 이벤트가 있습니다. 위의 값은 예방해서는 안되지만 사용자가 어쨌든 성능 문제를 기대할 수는 없습니다. – nilsge

답변

1

QGraphicText 개체 (또는 가능하면 QGraphicText에서 파생 된 클래스)로 이벤트를 사용하여 QGraphicsScene을 설정하는 것이 좋습니다. 각각을 독립적으로 배치하고 링크 된 목록과 같이 해당 줄의 "다음"이벤트에 대해 알립니다. 그런 다음 하나가 삽입되거나 삭제되면 해당 작업을 신속하게 수행 할 수 있으며 (불행히도 천천히) 라인의 다른 이벤트 위치를 업데이트 할 수 있습니다. 이전 항목의 오른쪽에 X 픽셀로 위치를 설정하는 경우이 업데이트는 너무 많은 코드가 아니지만 수정할 때 줄의 모든 이벤트를 업데이트해야합니다.

오른쪽 이벤트가 현재 이벤트의 하위 이벤트 일 수도 있고 Qt에 대한 위치 업데이트를 푸시 할 수도 있습니다. 그게 더 효과적 일지 나는 모른다. 그리고 나는 얼마나 깊은 자식 나무가 실제로 얻을 수 있는지 모른다.

이벤트의 Y 위치 업데이트 (요구 사항 4)는 쉬워야합니다. Y 위치 만 변경하면됩니다.

관련 문제