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