Как мне определить, был ли прокручен QPlainTextEdit?

#qt #qt5 #qplaintextedit

#qt #qt5 #qplaintextedit

Вопрос:

Существует хорошо известная ошибка (особенность?) эти сигналы изменения значений некоторое время блокируются для полосы прокрутки, связанной с QTpainTextEdit, поэтому я решил переопределить виртуальную функцию scrollContentsBy() и заметить прокрутку таким образом. Но scrollContentsBy также иногда не вызывается. Итак, как, черт возьми, программа может надежно заметить, что QPlainTextEdit был прокручен?

Ответ №1:

Вы можете проверить текущее смещение содержимого с помощью contentOffset(), когда вам нужно знать, была ли изменена прокрутка. Это защищенный метод, поэтому для его вызова вам нужно создать подкласс QPlainTextEdit. Одно предостережение заключается в том, что если содержимое меньше, чем область просмотра, оно вернет (0,0), даже если содержимое было перемещено внутри области просмотра, поэтому в конце это зависит от вашего определения прокрутки, но вы можете реализовать для него некоторую пользовательскую логику, в зависимости от ваших требований.

Комментарии:

1. Но это позволяет мне заметить, только если я посмотрю. Мне пришлось бы постоянно опрашивать значение, чтобы увидеть изменения. Пока единственное, что сработало, это переопределение paintEvent() и проверка, был ли текст прокручен после рисования (что кажется абсурдным количеством проблем).

2. Я вижу. Я думаю, что в этом случае название несколько двусмысленно… В любом случае, да, в этом случае, вероятно, проверка paintEvent() — это правильный путь, но я согласен, это звучит крайне неэффективно…