Допустим, в объекте 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();
В вашем первом примере вместо
mycursor = this->textCursor();
qDebug() << "pos=" << mycursor.position();
почему вы не называете это прямо как?
qDebug() << "pos=" << this->textCursor().position();
Потому что в питоне
self.textCursor().position()
работает.
Кроме того, я не уверен, но в вашем втором примере, возможно, вам нужно снова установить «курсор» как «textCursor» с помощью setTextCursor ().
void MyQTextEditObject::mousePressEvent(QMouseEvent* mouse_event) {
this->setTextCursor(cursor)
qDebug() << "pos=" << this->cursor.position();
}