PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Synchronisation von 2 QTextEdit Widgets



HangLoose
20-03-2005, 15:34
hi,

ich habe in meinem Chatclient für den Nickname sowie die eigentliche Message 2 QTextEdit's (siehe auch angehängter Screenshot).
Um jetzt nicht zwischen diesen beiden Widgets einen störenden Scrollbalken zu haben, ist die scrollbar vom *Nickname QTextEdit* deaktiviert.

Jetzt meine Frage -> Wie kann ich es erreichen, das wenn ich vom *Message QTextEdit* die Scrollbar benutze, der Inhalt vom *Nickname QTextEdit* synchron mit gescrollt wird?


Gruß HangLoose

peschmae
20-03-2005, 16:59
Also du meinst das mehrzeilige Fenster? Da hab ich ne weile gebraucht bis ich das kapiert habe - unten hats ja auch Nick und MEssage aber kein Textedit :D

Ich denke da sollte es doch gehen die Signale void contentsMoving ( int x, int y ) mit den Slots virtual void setContentsPos ( int x, int y ) vom jeweils anderen QScrollView (bzw. dem davon abgeleiteten Textedit) zu verknüppeln.

Natürlich hast du dann auch eine Verknüpfung der y-Koordinaten was du ja nicht möchtest, aber dem dürfte mit einem eigenen Slot recht einfach abzuhelfen sein.

MfG Peschmä

P.S. das beidseitige Connecten von Signals-Slot funktioniert tatsächlich weil das Signal contentsMoving nur ausgelöst wird wenn beim Aufruf von setContentPos auch wirklich was geändert wurde und nicht die schon bestehenden Positionen nochmal gesetzt wurden.

P.S.2 Sieht übrigens nett aus. XChat mochte ich schon immer :)

HangLoose
20-03-2005, 17:18
Hi peschmae,


Also du meinst das mehrzeilige Fenster? Da hab ich ne weile gebraucht bis ich das kapiert habe - unten hats ja auch Nick und MEssage aber kein Textedit :D

Jetzt wo Du es sagst, fällt mir auch auf, das das Posting nicht ganz eindeutig war ;). Ja ich meine schon die beiden mehrzeiligen Fenster.




Ich denke da sollte es doch gehen die Signale void contentsMoving ( int x, int y ) mit den Slots virtual void setContentsPos ( int x, int y ) vom jeweils anderen QScrollView (bzw. dem davon abgeleiteten Textedit) zu verknüppeln.

Natürlich hast du dann auch eine Verknüpfung der y-Koordinaten was du ja nicht möchtest, aber dem dürfte mit einem eigenen Slot recht einfach abzuhelfen sein.

MfG Peschmä

P.S. das beidseitige Connecten von Signals-Slot funktioniert tatsächlich weil das Signal contentsMoving nur ausgelöst wird wenn beim Aufruf von setContentPos auch wirklich was geändert wurde und nicht die schon bestehenden Positionen nochmal gesetzt wurden.


thx, das werde ich mir mal genauer ansehen.



P.S.2 Sieht übrigens nett aus. XChat mochte ich schon immer :)

stimmt XChat stand irgendwie schon Pate ;).


Gruß Daniel

HangLoose
20-03-2005, 19:57
@peschmae


das war genau der richtige zaunpfahl und ging ja einfacher wie gedacht ;).



Gruß HangLoose

AceTheFace
25-03-2005, 11:38
Hi Hangloose, wann gibts denn dein Programm zum Ausprobieren? Ein schicker QT-IRC-Client würde mir hier noch fehlen :)

Gruß,
Ace

HangLoose
25-03-2005, 13:40
Hi AceTheFace,

keine Ahnung ob es ihn je offiziell geben wird ;), so'n IRC client ist nen haufen arbeit und mir fehlt etwas die zeit für das teil atm.

du kannst mir aber gerne deine email zukommen lassen, dann schick ich dir die sourcen und du kannst den beta status bewundern :p.


Gruß HL

HangLoose
01-04-2005, 20:09
moin,

ich bräuchte nochmal nen kleinen denkanstoß.

folgendes problem => die message eines users ist etwas länger, das heißt sie muss umbrochen werden. das bedeutet, das im linken qtextedit jetzt zusätzlich eine leerzeile eingefügt werden muss.

bisher hab ich es so gelöst, das ich mir die breite vom rechten widget geholt habe, diesen wert durch 7 dividiert habe(rausgefunden durch rumprobieren) und mit diesem wert die WrapColumnOrWidth gesetzt habe.

wenn jetzt ne message eintrifft, wird geprüft ob sie *länger* als die
WrapColumnOrWidth usw.

das ganze gefällt mir irgendwie überhaupt nicht und wird mit der auswahl von mehreren fonts/größen noch schlechter zu händeln. am liebsten wäre mir ein signal das bei einem wordwrap gesendet wird. qtextedit selbst scheint so ein signal nicht bereitzustellen.

ich hab mir schon mal den code von qtextedit angesehen, nur sehe ich da nicht so recht, welche methode ich da überschreiben könnte.


jemand der ne idee hat?


Gruß Hangloose

peschmae
01-04-2005, 21:10
Du könntest natürlich für jede Zeile mittels Hilfe von QFontMetrics::boundingRect gucken wie breit die (in der passenden Schrift) ist und dann das mit der Breite des Textfelds vergleichen.

Aber das ist eher ein Hack und muss auch nicht immer genau stimmen (in Grenzfällen).

Wäre besser wenn man das aus dem Textfeld rausquetschen könnte irgendwie.

MfG Peschmä

HangLoose
01-04-2005, 21:22
hi peschmae,

mit QFontMetrics hab ich auch schon rumprobiert. so richtig gefallen tut mir die lösung aber nicht.

muss mir das morgen nochmal in ruhe durch'n kopf gehen lassen.


Gruß HL