#c #qt #qt-designer
#c #qt #qt-designer
Вопрос:
Я использую QT 5.11. Когда я использую стандартное «удержание LMB перемещение мыши» для выделения некоторого текста в QLineEdit, он работает так, как не должен.
Предположим, я начинаю выделение справа и перемещаю указатель (удерживая LMB нажатой) влево. Выделение отображается обычным способом. Но если я помещаю указатель под строку, выделение исчезает. И, если я помещаю указатель над строкой, выделение перемещается влево, выделяя весь текст. Это не похоже на стандартное поведение, поскольку, когда вы применяете эти действия к строке URL браузера, выделение не исчезнет, когда вы поместите указатель под строку.
Я могу извлечь из QLineEdit, перехватить событие перемещения мыши и переопределить поведение выбора, но это повлияет на QLineEdits по всему коду во многих и многих файлах. Так это способ заставить QLineEdit работать обычным способом в QT Designer или что-то в этом роде? Потому что похоже, что его поведение нарушено.
Комментарии:
1. Может быть, установка фильтра событий (
installEventFilter
) может вам помочь? В любом случае, если вы создадите подкласс QLineEdit, почему это повлияет на все из них?2. Я имею в виду, что для создания подкласса QLineEdit с фиксированным поведением выбора потребуется, чтобы все QLineEdits были заменены по всему коду таким подклассом.
3. если я установлю eventfilter, он снова потребует его настройки во всех QLineEdits. Является ли это поведение своего рода ошибкой QT 5.11 или я делаю что-то не так? Кто-нибудь еще поддерживает это поведение? Потому что в 5.9 QLineEdits, похоже, работает нормально.
4. ну, мой Qt 5.11 ведет себя таким образом во всех текстовых вводах, да. Раньше этого не замечал. Вероятно, вы могли бы упростить свое решение, запустив рекурсивно через дочерние элементы виджетов и выполнив поиск по всем QLineEdits (если eventfilter работает), но да, выглядит запутанной проблемой.
5. По крайней мере, это одинаковое поведение для всех приложений в macOS: если вы выделяете текст и перемещаете курсор под строкой редактирования, он выделит текст от курсора до конца. Если вы переместите курсор над строкой, он выделит текст от курсора до начала.