Seite 1 von 1
syncronisation des cursors von 2 qtextedit
Verfasst: 19. November 2007 23:04
von Linuxguru
hallo,
wie schon erwähnt. gibt es eine möglichkeit die vertikale cursorposition eines qtextedits auf einen anderenzu übertragen?
wenn ich bei textedit2 die position ändere, dann soll die position auf textedit1 gesetzt werden.
ich brauch nur die position der reihe, nicht der spalte.
danke

Verfasst: 20. November 2007 09:10
von Flachkoepper
Ein bisschen mehr Einsatz kann man ja wohl erwarten, oder? 10 Sekunden in der Doku zu QTextEdit haben bei mir folgende Stichwörter gebracht:
Code: Alles auswählen
void cursorPositionChanged ();
QTextCursor textCursor () const;
int QTextCursor::position () const;
Damit sollte doch was anzufangen sein, oder?
Verfasst: 20. November 2007 09:21
von zwutz
ich frag mich eher, obs da nicht Probleme bezüglich des Focus gibt...
Verfasst: 20. November 2007 09:47
von Flachkoepper
Hmm, da hast du natürlich recht, soweit habe ich noch gar nicht gedacht. Zwei Widgets, die zur selben Zeit den Cursor haben, könnte in der Tat schwierig werden...
Sorry!
Verfasst: 20. November 2007 12:27
von upsala
Ich versteh zwar jetzt den Sinn von 2 Cursorn(?) nicht, aber es ist doch ganz einfach. Nur das Widget, daß den Focus hat, darf die Cursorposition an das andere Widget weitergeben. Die notwendigen Funktionen dazu wurden ja schon genannt.
Verfasst: 20. November 2007 19:22
von Linuxguru
hallo,
in der hilfe hab ich natürlich schon geschaut. das problem wird vermutlich am focus liegen.
der hintergrund meines vorhabens.
ich hab 2 textedit. in beiden objekten werden die zeilen syncron mit text gefüllt.
das funktioniert auch so weit ganz gut. wenn die texteditzeilen im sichtbaren bereich gefüllt sind,
erscheint auf beiden seiten eine scrollbar.
nun sollte es praktisch so verlaufen, wenn ich im textedit2 mit dem cursor nach oben gehe, sich die scrollbar demnach auch nach oben verschiebt, dann sollte das im textedit1 auch so sein. das heisst, ich muss mich auf beiden seiten immer in der selben zeile befinden, darf aber nur im textedit2 zeilen schreiben.
danke

Verfasst: 20. November 2007 23:48
von Linuxguru
hallo,
ich hab nun eine teillösung, die ansatzweise das macht was ich vorhab.
hier mal mein code:
Code: Alles auswählen
MyTextEdit::MyTextEdit( QWidget* parent )
: QWidget( parent )
{
QHBoxLayout *editLayout = new QHBoxLayout(this);
editLayout->setMargin(0);
lineNumber = new QTextEdit;
lineNumber->setMaximumWidth(50);
lineNumber->setStyleSheet( "border: 0px solid black" );
lineNumber->setText("1");
lineNumber->setAlignment( Qt::AlignRight );
lineNumber->verticalScrollBar()->setVisible( false );
lineNumber->setEnabled( false );
edit = new QTextEdit;
edit->setStyleSheet( "border: 0px solid black" );
output = new QLineEdit;
editLayout->addWidget(lineNumber);
editLayout->addWidget(edit);
editLayout->addWidget(output);
connect( edit->document(), SIGNAL(contentsChange(int,int,int)), this, SLOT(textChanged(int,int,int)) );
connect( edit, SIGNAL(cursorPositionChanged()), this, SLOT(sliderPosition1()) );
connect( edit->verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(sliderPosition(int)) );
}
void MyTextEdit::sliderPosition(int)
{
int pos1 = lineNumber->verticalScrollBar()->value();
int pos2 = edit->verticalScrollBar()->value();
lineNumber->verticalScrollBar()->setRange( 0,65535 );
edit->verticalScrollBar()->setRange( 0,65535 );
lineNumber->verticalScrollBar()->setSliderPosition( pos2 );
output->setText( QString::number(pos1)+" - "+QString::number(pos2) );
}
void MyTextEdit::sliderPosition1()
{
int pos1 = lineNumber->verticalScrollBar()->value();
int pos2 = edit->verticalScrollBar()->value();
lineNumber->verticalScrollBar()->setRange( 0,65535 );
edit->verticalScrollBar()->setRange( 0,65535 );
lineNumber->verticalScrollBar()->setSliderPosition( pos2 );
output->setText( QString::number(pos1)+" - "+QString::number(pos2) );
}
der scrollt nun das linenumbertextedit automatisch mit, wenn ich das edittextedit scrolle oder den cursor verschiebe.
allerdings hab ich die sliderrange statisch festlegen müssen, da mir keine andere lösung bekannt ist. das macht natürlich auch den greifer der scrollbar klein, sobald sie sichtbar wird.
kann mir evtl noch jemand sagen, wie sich der greifer der scrollbar besser anpassen lässt, sodass ich auch nur in dem textdocument scrollen kann, die auch schon sichtbar sind??
danke
