Можно ли «обновить»? QTextCursor?

Допустим, в объекте 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();

1

Решение

В вашем первом примере вместо

    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();
}
0

Другие решения


По вопросам рекламы [email protected]