是否可以更新"一个QTextCursor?

时间:2014-06-01 21:45:04

标签: c++ qt cursor qtextcursor

在QTextEdit对象中,我想说我想知道角色在鼠标光标下的位置。

我可以写......

void MyQTextEditObject::mousePressEvent(QMouseEvent* mouse_event) {
  mycursor = this->textCursor();
  qDebug() << "pos=" << mycursor.position();
}

...它的工作原理(鼠标位置从0变为最后一个字符的最后一个索引),但每次事件发生时,mousePressEvent()方法都会创建一个新光标。这让我感到困扰,因为我不知道&#34;成本&#34;这样的创作。

那么,为什么不创建一个游标属性并在 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();

1 个答案:

答案 0 :(得分:0)

在您的第一个示例中,而不是

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

为什么不直接称它为?

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

因为在python中

    self.textCursor().position() 

作品。

另外,我不确定,但在你的第二个例子中,你可能需要使用setTextCursor()再次将“cursor”设置为“textCursor”。

    void MyQTextEditObject::mousePressEvent(QMouseEvent* mouse_event) {
           this->setTextCursor(cursor)
           qDebug() << "pos=" << this->cursor.position();
    }