QTextEdit ウィジェットから可視テキストのみを取得する




このスレッド QTextEdit または QPlainTextEdit ウィジェットから現在表示されているテキストを取得するにはどうすればよいですか?ウィジェットに含まれるすべてのテキストを取得する方法に答えるだけです。


私の状況では、多くのテキストを含む QTextWidget があります。一度に表示できる数をはるかに超えています。表示されるテキストの変更に応答して、何らかのアクションを実行したいと考えています。


ユーザーがテキスト領域をスクロールしたり、新しいテキストがウィジェットに追加されたりしたときに、表示されているテキストに対して何らかのアクションを実行したいと考えています。 QTextEdit::verticalScrollBar() からのシグナルに簡単に接続できますが、表示されているテキストを見つける方法は?


私はこれまでのところこれを持っていますが、ドキュメントのページとページを読んだ後、QTextEdit には可視領域のテキストが何であるかを知らせる方法がないようです.


 void MyProject::on_textEdit_scrollBar_valueChanged(int value)
{
QStringList visibleText = // how do I do this?
}

答え:


QTextEdit::cursorForPosition を使用できます :


QTextEdit textEdit;
//...
QTextCursor cursor = textEdit.cursorForPosition(QPoint(0, 0));
QPoint bottom_right(textEdit.viewport()->width() - 1, textEdit.viewport()->height() - 1);
int end_pos = textEdit.cursorForPosition(bottom_right).position();
cursor.setPosition(end_pos, QTextCursor::KeepAnchor);
qDebug() << cursor.selectedText();

いくつかのコードの回答


edit->textCursor().insertText(text);
void MyQPlainTextEdit::contextMenuEvent(QContextMenuEvent *event) {
QMenu *menu = createStandardContextMenu();
menu->addAction(tr("My Menu Item"));
//...
menu->exec(event->globalPos());
delete menu;
}