Как да създадете GUI с множество редове от глифове/текст паралелно, където глифовете имат x и y координати

В момента създавам приложение за редактиране на паралелни списъци със събития, които се случват на времева рамка. В модела/бекенда има списък от списъци, където подсписъкът съдържа всички елементи в ред.

Всяко събитие трябва да бъде представено чрез низ/глиф (от ttf шрифт) и всеки от текстовите редове трябва да бъде редактиран като нормален ред текст с няколко изключения как се показват. Погледни тази снимка:

Пример

По принцип всеки ред представлява ред текст. Всяко събитие е един символ/глиф. Значи е текстов редактор?! Не точно

  1. Няма прекъсвания на редове
  2. Няколко линии в паралел
  3. Всеки глиф има индивидуален интервал след него (X-посока)
  4. Всеки глиф може да се премества "нагоре" и "надолу" поотделно (Y-посока) (може би най-важната точка)
  5. Ако изтриете глиф, всички елементи вдясно от него отидете стъпка "наляво", за да затворите празнината (точно както в нормален текстов редактор).
  6. Ако вмъкнете глиф, всички елементи вдясно от него преминете стъпка „надясно“, за да създадете празнина за вмъкване.

Повечето от тези точки са обхванати от QGraphicsLinearLayout, но може би това е грешната джаджа/оформление за този подход. Имате ли съвети?


person nilshi    schedule 05.08.2011    source източник
comment
Бихте ли дали малко информация за размерите, за които говорим тук? 5 реда с 15 събития? 100 реда с 5000 събития?   -  person Exa    schedule 05.08.2011
comment
@Exa Да, разбира се. Не мога наистина да го предвидя, тъй като това е избор на потребителите, но ето малко здрав разум: тъй като долните граници няма да представляват проблем (по отношение на производителността), така или иначе общата горна граница ще бъде около 150 реда с няколко стотици до около 5k събития. Стойности над това не трябва да се предотвратяват, но е рядко и потребителите биха очаквали проблеми с производителността оттук нататък.   -  person nilshi    schedule 05.08.2011


Отговори (1)


Бих предложил да опитате да настроите QGraphicsScene с вашите събития като QGraphicText обекти (или евентуално клас, извлечен от QGraphicText). Нека всеки да бъде позициониран независимо, но ги уведомете за „следващото“ събитие на тяхната линия, като свързан списък. След това, когато едно бъде вмъкнато или изтрито, можете бързо да извършите тази операция и (за съжаление, по-бавно) да актуализирате позициите на другите събития в реда. Тази актуализация може да не е твърде много код, ако просто задава позицията да бъде X пиксела вдясно от предишния елемент, но ще трябва да актуализира всяко събитие в реда след модификацията.

Може би бихте могли да направите нещо, при което събитието вдясно е дъщерно на текущото събитие, и да изпратите актуализациите на позицията към Qt. Не знам дали това би било по-ефективно и не знам колко дълбоки дъщерни дървета наистина могат да достигнат.

Актуализирането на Y позицията на събитието (изискване 4) трябва да е лесно: просто променете Y позицията му.

person Scott Minster    schedule 05.08.2011