Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: neversleep от Октябрь 02, 2011, 09:21



Название: QGraphicsTextItem обработка keyPressEvent().
Отправлено: 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);
}
 


Название: Re: QGraphicsTextItem обработка keyPressEvent().
Отправлено: neversleep от Октябрь 15, 2011, 09:22
Вопрос всё ещё актуален... Неужели это баг?  :-\