hi,
hat einer eine Idee wie man Lauftext in Qt verwirklichen könnte?
Elgrimm Esleborn
[Qt4.1] Lauftext
[Qt4.1] Lauftext
Glaube an eine Lösung, nur dann kannst du auch eine finden.
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.
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.
Scheinbarsry hab mich wohl falsch ausgedrückt...
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.