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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QGraphicsTextItem обработка keyPressEvent().  (Прочитано 2945 раз)
neversleep
Гость
« : Октябрь 02, 2011, 09:21 »

Задача проста: необходимо обрабатывать keyPressEvent() и проверять на нажатие клавиш Qt::Key_Return/Qt::Key_Enter и Qt::Key_Escape.

1) По нажатию Qt::Key_Return/Qt::Key_Enter войти в режим редактирования(или выйти, если уже в режиме редактирования) и выделить весь текст.
2) По нажатию Qt::Key_Escape выйти из режима редактирования и снять выделение текста.

Проблемы 2:

1) keyPressEvent() перестаёт срабатывать после первого входа/выхода в режим редактирования.
2) Непонятки с выделением текста: иногда выделение не снимается + цвет выделения так же иногда глючит, т.е вместо стандартного Qt::darkBlue этот: http://savepic.su/75570.jpg

Qt 4.7.4 MSVS 2008 SP1.

Код
C++ (Qt)
MyGraphicsTextItem::MyGraphicsTextItem( const QString &text, QGraphicsItem *parent /*= 0*/, QGraphicsScene *scene /*= 0*/ )
: QGraphicsTextItem(text, parent, scene)
{
setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsFocusable);
}
 
void MyGraphicsTextItem::keyPressEvent( QKeyEvent *event )
{
switch (event->key()) {
case Qt::Key_Return:
case Qt::Key_Enter:
if (textInteractionFlags() & Qt::TextEditorInteraction) {
setTextInteractionFlags(Qt::NoTextInteraction);
 
QTextCursor cursor = textCursor();
cursor.clearSelection();
setTextCursor(cursor);
 
setSelected(false);
} else {
m_oldText = toPlainText();
setTextInteractionFlags(Qt::TextEditorInteraction);
 
// Выделить всё
QTextCursor cursor = textCursor();
cursor.select(QTextCursor::Document);
setTextCursor(cursor);
}
return;
 
case Qt::Key_Escape:
if (textInteractionFlags() & Qt::TextEditorInteraction) {
setTextInteractionFlags(Qt::NoTextInteraction);
setPlainText(m_oldText);
 
// Снять выделение
QTextCursor cursor = textCursor();
cursor.clearSelection();
setTextCursor(cursor);
 
setSelected(false);
return;
}
}
QGraphicsTextItem::keyPressEvent(event);
}
 
« Последнее редактирование: Октябрь 02, 2011, 09:29 от neversleep » Записан
neversleep
Гость
« Ответ #1 : Октябрь 15, 2011, 09:22 »

Вопрос всё ещё актуален... Неужели это баг?  В замешательстве
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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