1

在 QTextEdit 对象中,假设我想知道字符在鼠标光标下的位置。

我可以写...

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

...它可以工作(鼠标位置从 0 变为最后一个字符的最后一个索引)但是 mousePressEvent() 方法在每次发生事件时都会创建一个新光标。它困扰着我,因为我不知道这种创作的“成本”。

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

因为在python中

    self.textCursor().position() 

作品。

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

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