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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Qt4.2.3]Проблема с видом курсора в QTextEdit  (Прочитано 7254 раз)
Разуев Максим
Гость
« : Май 18, 2007, 14:03 »

Никак нимогу изменить курсор(графический, не TextCursor) в QTextEdit при нажатии кнопки Control.
Пробовал переопределить MouseMoveEvent, но редактор отлавливает это событие только вне зоны текста (например на полосе прокрутки).
MouseTracking - включено.
KeyPressEvent несмотря на наличие кода кнопки Control, нажатие на неё не обрабатывает.
Записан
SABROG
Гость
« Ответ #1 : Май 18, 2007, 21:42 »

У многих контролов есть так называемый viewport, это widget который лежит поверх основного виджета, именно в нем рисуется текст в QTextEdit, итемы в QTreeView.
Т.е. тебе надо перехватывать события именно с viewporta, а не с основного виджета контрола.
Записан
Разуев Максим
Гость
« Ответ #2 : Май 19, 2007, 00:12 »

Каким образом это реализовать в классе наследнике QTextEdit. Только через фильтр событий?
Записан
SABROG
Гость
« Ответ #3 : Май 19, 2007, 00:34 »

Либо наследуй QTextEdit и переопределяй метод, либо InstallEventFilter
Записан
Разуев Максим
Гость
« Ответ #4 : Май 19, 2007, 06:55 »

Я и говорю что наследовал QTextEdit и переопределял его метод MouseMoveEvent. Но похоже на viewport Edit-а он не работает.
Записан
SABROG
Гость
« Ответ #5 : Май 19, 2007, 12:02 »

QTextEdit наследуется таким образом:

QObject->QWidget->QFrame->QAbstractScrollArea->QTextEdit

В QAbsctractScrollArea все эвенты QWidgeta переопределяются, и эти методы становятся виртуальными, причем они должны использовать viewport. Значит унаследовав QTextEdit и объявив в своем классе эти эвенты ты автоматически уже используешь viewport. Но есть еще метод viewportEvent, в принципе он не должен использоваться, т.к. должно и так все работать, но мало ли:

Цитировать

bool QAbstractScrollArea::viewportEvent ( QEvent * event )   [virtual protected]
The main event handler for the scrolling area (the viewport() widget). It handles the event specified, and can be called by subclasses to provide reasonable default behavior.
Returns true to indicate to the event system that the event has been handled, and needs no further processing; otherwise returns false to indicate that the event should be propagated further.
You can reimplement this function in a subclass, but we recommend using one of the specialized event handlers instead.
Specialised handlers for viewport events are: paintEvent(), mousePressEvent(), mouseReleaseEvent(), mouseDoubleClickEvent(), mouseMoveEvent(), wheelEvent(), dragEnterEvent(), dragMoveEvent(), dragLeaveEvent(), dropEvent(), contextMenuEvent(), and resizeEvent().
Записан
Разуев Максим
Гость
« Ответ #6 : Май 19, 2007, 15:05 »

У меня в поле ввода обрабатывается MouseClick и не хочет MouseMove.
viewportEvent я попробую.

viewportEvent не работает. Вообще прикол в том что через него курсор меняется на полосе прокрутки и похоже на границе того самого viewport. Я вообще хочу добиться чтобы курсор менялся над ссылками в тексте.
Записан
Разуев Максим
Гость
« Ответ #7 : Май 26, 2007, 04:17 »

Все никак не получается реализовать изменение курсора. Неужели никто не сталкивался с такой проблемой.
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #8 : Май 26, 2007, 09:23 »

А использовал ли ты setMouseTracking( true ) для QTextEdit?
Ведь только после этого сработает mouseMoveEvent ( QMouseEvent * event ).
Записан
Разуев Максим
Гость
« Ответ #9 : Май 26, 2007, 13:29 »

использовал.
Записан
Danila_Bagrofff
Гость
« Ответ #10 : Апрель 07, 2009, 09:06 »

возможно, кому-то поможет:
http://www.prog.org.ru/index.php?topic=8240.msg51528#msg51528
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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