1

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();
4

1 に答える 1

0

最初の例では、代わりに

    mycursor = this->textCursor();
    qDebug() << "pos=" << mycursor.position();

なぜあなたはそれを直接呼び出さないのですか?

    qDebug() << "pos=" << this->textCursor().position();

パイソンだから

    self.textCursor().position() 

動作します。

また、よくわかりませんが、2番目の例では、setTextCursor()を使用して「カーソル」を「textCursor」として再度設定する必要があるかもしれません。

    void MyQTextEditObject::mousePressEvent(QMouseEvent* mouse_event) {
           this->setTextCursor(cursor)
           qDebug() << "pos=" << this->cursor.position();
    }
于 2014-08-08T15:52:06.507 に答える