2012-02-19 18 views
9

Istnieją funkcje, takie jak textEdit->textCursor()->selectionStart() i textEdit->textCursor()->selectionEnd(), ale nie ma żadnych funkcji setSelectionStart, setSelectionEnd.QTextEdit. Jak ręcznie wybrać tekst?

Czy istnieje sposób ręcznego wyboru części tekstu?

Odpowiedz

24
QTextCursor c = textEdit->textCursor(); 
c.setPosition(startPos); 
c.setPosition(endPos, QTextCursor::KeepAnchor); 
textEdit->setTextCursor(c); 

Ten fragment kodu przesuwa kursor do pozycji początkowej selekcji przy użyciu setPosition, następnie przenosi go do końca selekcji, ale pozostawia kotwicę selekcji na starej pozycji określając MoveMode jako drugi parametr.

Ostatnia linia powoduje, że zaznaczenie jest widoczne wewnątrz kontrolki edycji, więc należy ją pominąć, jeśli chce się wykonać pewne manipulacje z zaznaczonym tekstem.

Ponadto, jeśli nie masz dokładnych pozycji, pomocne jest: movePosition: możesz przesunąć kursor w kierunku various ways, na przykład jedno słowo w prawo lub w dół o jedną linię.

+0

Jak zaktualizować obszar zaznaczenia? –

-3

Spróbuj użyć:

QTextCursor cur = tw->textCursor(); 
cur.clearSelection(); 
tw->setTextCursor(cur); 
0

I napotkał podobny problem. W systemie Windows 10 może występować błąd "przeciągnij/przenieś". Używamy QT_NO_DRAGANDDROP jako opcji kompilatora, która sprawia, że ​​zaznaczanie tekstu w QTextEdit nie jest już możliwe.

Rozwiązanie:

void QTextEditEx::mouseMoveEvent(QMouseEvent *event) 
{ 
    QTextEdit::mouseMoveEvent(event); 
    if (event->buttons() & Qt::LeftButton) 
    { 
     QTextCursor cursor = textCursor(); 
     QTextCursor endCursor = cursorForPosition(event->pos()); // key point 
     cursor.setPosition(pos, QTextCursor::MoveAnchor); 
     cursor.setPosition(endCursor.position(), QTextCursor::KeepAnchor); 
     setTextCursor(cursor); 
    } 
} 

void QTextEditEx::mousePressEvent(QMouseEvent *event) 
{ 
    QTextEdit::mousePressEvent(event); 
    if (event->buttons() & Qt::LeftButton) 
    { 
     QTextCursor cursor = cursorForPosition(event->pos()); 
     // int pos; member variable 
     pos = cursor.position(); 
     cursor.clearSelection(); 
     setTextCursor(cursor); 
    } 
} 

referencyjny:

  1. Dwa istniejące odpowiedzi

  2. QTextEdit: get word under the mouse pointer?

Powiązane problemy