QTextEdit オブジェクトで、マウス カーソルの下の文字の位置を知りたいとしましょう。
書ける...
void MyQTextEditObject::mousePressEvent(QMouseEvent* mouse_event) {
mycursor = this->textCursor();
qDebug() << "pos=" << mycursor.position();
}
...動作します(マウスの位置が0から最後の文字の最後のインデックスに変わります)が、イベントが発生するたびにmousePressEvent()メソッドが新しいカーソルを作成します。そのような創造の「コスト」がわからないので、私は気になります。
それでは、cursor属性を作成して、それをmousePressEvent()で使用してみませんか?
何かのようなもの :
class MyQTextEditObject : public QTextEdit {
Q_OBJECT
public:
// [...]
QTextCursor cursor;
}
MyQTextEditObject::MyQTextEditObject(QWidget* parent) : QTextEdit(parent) {
// [...]
this->cursor = this->textCursor();
}
void MyQTextEditObject::mousePressEvent(QMouseEvent* mouse_event) {
qDebug() << "pos=" << this->cursor.position();
}
しかし、位置は固定されたかのように、もはや変化しません。それで、どういうわけかカーソルを更新する方法はありますか? または、 QTextCursor を繰り返し作成するコストは取るに足らないものですか?
更新:次のようなものを書く...
mycursor= this->cursorForPosition(mouse_event->pos());
...新しいカーソルを作成し、次と同等のようです:
mycursor= this->textCursor();