2012-02-19 7 views

答えて

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

コードのこの部分は、次いで、選択の終わりに移動するが、第二のようMoveModeを指定することによって、古い位置で選択アンカーを残し、setPositionを使用して、選択の開始位置にカーソルを移動させますパラメータ。

最後の行では、エディットコントロールの中に選択範囲が表示されるように設定されているため、選択したテキストで何らかの操作をしたい場合はスキップする必要があります。

正確な位置がわからない場合は、movePositionが役に立ちます。右に1語、下に1行など、various waysにカーソルを移動できます。

+0

? –

-3

は、使用してみてください:

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

私は同様の問題が発生しました。 Windows 10では、「ドラッグ/移動」のバグがある可能性があります。コンパイラオプションとしてQT_NO_DRAGANDDROPを使用しています。QTextEditでのテキスト選択がmorkではなくなりました。

ソリューション:

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); 
    } 
} 

参照:

  1. 2件の既存の回答選択領域を更新する方法

  2. QTextEdit: get word under the mouse pointer?

関連する問題