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