Seite 1 von 1
[Qt4.1] Lauftext
Verfasst: 19. Februar 2006 22:20
von Esleborn
hi,
hat einer eine Idee wie man Lauftext in Qt verwirklichen könnte?
Elgrimm Esleborn
Verfasst: 19. Februar 2006 23:04
von michams
Theoretisch recht einfach:
Du brauchst einen Counter, der die aktuelle Stingposition festhält. Nun erstellst du von deinem String, der im Laufband angezeigt werden soll eine Kopie. In dieser Kopie löscht du alles bis zur Startposition (=Counter) und alles ab der Startposition + Länge des Laufbandes. Falls die verbleibende Länge nach dem Abschneiden bis zur Startposition kleiner als die Laufbandlänge ist, fügst du den Originalstring einfach nochmal hinten dran und löschst erst dann den Teil hinten. Der String kann dann gezeichnet oder an ein Label, Editfeld,... gegeben werden.
Damit sich was bewegt, startest du einen zyklischen Timer, bei dessen Ablauf du das oben genannte ausführst und anschließend den Counter inkrementierst. Wenn der Counter die Stringlänge überschreitet, einfach wieder auf 0 setzen, dann fängt das Band von vorne an... recht einfach
Als Grundlage kann man zB das "Wiggly" Example ([qt]\examples\widgets\wiggly) benutzen, das bringt alles erforderliche bereits mit, macht fast das selbe und packt es gleich in ein gebrauchsfertiges Widget. Ledeiglich das PaintEvent würde ich als ersten Test durch einen einfachen QLabel->setText() ersetzen. Später kann man den Text auch selber zeichnen.
Verfasst: 20. Februar 2006 14:24
von Esleborn
sry hab mich wohl falsch ausgedrückt...
das eigentliche Problem ist nicht das Widget für normalen Text, sondern für richtext... Wie bekomm ich raus, wieviel Text ein richText benötigt und wie painte ich es verschoben...
Elgrimm Esleborn
Verfasst: 20. Februar 2006 18:47
von michams
sry hab mich wohl falsch ausgedrückt...
Scheinbar

Das klang wirklich so, als ginge es um Grundlagenprobleme
Die Länge ist natürlich problematisch, weil man außer bei proportionalen Fonts kein Chance hat, die Zahl der Zeichen gegenüber der Länge festzustellen. Ist möglicherweise aber auch gar nicht nötig. Wenn du das ganze in ein eigenes Widget packst, endet die Zeichenroutine eben dort, wo das Widget endet. Selbst wenn man darüber hinaus "malt", hat das keinen Effekt. Alles was du tun müßtest, ist den Worst Case zu bestimmen (also alle Zeichen zB "i" oder "l"), und damit die Zahl der Zeichen, die im schlimmsten Fall gezeichnet werden müssen, um das Widget zu füllen. Dann wiederholt man den String einfach so oft, bis die Länge überschritten ist. Besteht der String umgekehrter Weise aus lauter breiten Zeichen (zB "O") dann wird eben über das Widget hinaus gezeichnet, was dann irrelevant ist, dargestellt wird's zumindest nicht.