Russian Qt Forum
Сентябрь 30, 2024, 14:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [QTextEdit/QTextBrowser] Как заставить мигать курсор в Read Only режиме?  (Прочитано 5619 раз)
iroln
Гость
« : Март 28, 2012, 11:27 »

Всем привет!

Имеем класс, наследуемый от QTextBrowser. Задача класса отображать текст без возможности редактирования, но при этом доступна навигация по тексту, текст можно выделять и копировать, а курсор должен отображаться и мигать. В режиме редактирования курсор мигает, в режиме Read Only курсор не мигает.

Сейчас заданы следующие флаги и свойства:
Код
Python
self.readOnly(True)
self.setTextInteractionFlags(
   Qt.TextBrowserInteraction |
   Qt.LinksAccessibleByKeyboard |
   Qt.LinksAccessibleByMouse |
   Qt.TextSelectableByKeyboard |
   Qt.TextSelectableByMouse)
 

Курсор отображается (|), но не мигает.

Вопросы:
1. Можно как-то заставить текстовый курсор мигать в Read Only режиме, любым способом?
2. Как изменять вид текстового курсора? (в принципе это не очень важно, но может это позволит сделать мигающий курсор)
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Март 28, 2012, 12:13 »

Имхо, такое поведение сконфузит пользователя.
Нужно не забывать главное правило GUI - избегать многозначности.
Записан

Qt 5.11/4.8.7 (X11/Win)
iroln
Гость
« Ответ #2 : Март 28, 2012, 12:40 »

GreatSnake, Возможно вы правы, но в других реализациях редакторов из различных тулкитов курсор мигает (например, Avalon Edit для WPF). Мигающий курсор лучше заметен.

Я думаю, можно сделать иначе, фильтровать событие KeyPress и не пропускать ничего кроме перемещения курсора. Такой вот кустарный Read Only режим. Только нужно будет ещё и мышку фильтровать и контекстное меню, а это геморрой. Улыбающийся

UPD:
Ещё хочу заметить, что при предпросмотре в Qt Designer курсор мигает в Read Only режиме.
« Последнее редактирование: Март 28, 2012, 12:43 от iroln » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Март 28, 2012, 13:27 »

Ещё хочу заметить, что при предпросмотре в Qt Designer курсор мигает в Read Only режиме.
У меня не мигает.
Записан

Qt 5.11/4.8.7 (X11/Win)
iroln
Гость
« Ответ #4 : Март 29, 2012, 10:20 »

Облазил "весь интернет", ничего не нашёл на счёт управления видом текстового курсора в QTextEdit. Похоже, в Qt просто нет публичного API для доступа к каретке в Edit-виджетах.

Вот тут у чела тоже проблема с миганием курсора:
http://qt-project.org/forums/viewthread/1116

В принципе наплевать на мигание, но мне, например, надо изменить цвет фона виджета на тёмный, а цвет курсора я изменить не могу, в итоге курсор не виден на тёмном фоне. В общем фигня какая-то, товарищи. Улыбающийся
« Последнее редактирование: Март 29, 2012, 10:22 от iroln » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #5 : Март 29, 2012, 11:22 »

В принципе наплевать на мигание, но мне, например, надо изменить цвет фона виджета на тёмный, а цвет курсора я изменить не могу, в итоге курсор не виден на тёмном фоне. В общем фигня какая-то, товарищи. Улыбающийся
Странно, т.к. курсор и текст должны рисоваться одним цветом.
Записан

Qt 5.11/4.8.7 (X11/Win)
iroln
Гость
« Ответ #6 : Март 29, 2012, 14:45 »

У меня текст раскрашивается через Html (setTextColor), а цвет фона задаётся таким образом:

Код
Python
p = self.viewport().palette()
p.setColor(QPalette.Base, color)
self.viewport().setPalette(p)
 

Поэтому текстовый курсор ничего не знает об изменении цветов.
Можно использовать стили для установки цвета и цвета фона, но если установить светлый цвет текста (color), то это изменяет цвет надписей контекстных меню и прочее, а если поставить цвет фона через background-color, это целиком изменяет цвет виджета (в том числе цвет скроллбаров), в общем всюду засады.

Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.209 секунд. Запросов: 23.