Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Igors от Апрель 06, 2015, 11:13



Название: QLineEdit + undo
Отправлено: Igors от Апрель 06, 2015, 11:13
Добрый день

QLineEdit в фокусе (мигает каретка). Как сделать так чтобы нажатие Cmd-Z вызывало команду меню Undo (имеется и enabled)? Пробовал навесить фильтр на  QLineEdit и вернуть true, менял там событие accept/ignore - но до меню дело все равно не доходит.

Спасибо


Название: Re: QLineEdit + undo
Отправлено: GreatSnake от Апрель 06, 2015, 11:24
Невесить QShortcut.


Название: Re: QLineEdit + undo
Отправлено: Igors от Апрель 06, 2015, 12:09
Невесить QShortcut.
Не очень понял, наверное addAction (где делать то же что из меню), а той action назначить shortcut. Тогда надо самому подсвечивать меню и проверять доступно ли сейчас undo.


Название: Re: QLineEdit + undo
Отправлено: GreatSnake от Апрель 06, 2015, 12:24
А разве про меню хоть что-то упоминалось?


Название: Re: QLineEdit + undo
Отправлено: Igors от Апрель 06, 2015, 13:40
А разве про меню хоть что-то упоминалось?
Мной упоминалось (см первый пост), а что Вы имели ввиду - не знаю  :)

Получилось, "не то фильтровал", надо было QEvent::ShortcutOverride


Название: Re: QLineEdit + undo
Отправлено: AlexEx от Апрель 06, 2015, 13:46
Сделать что-нибудь по аналогии вот этого shortcut'а вставки текста (наскоро выдрано из проекта,лень править):
QShortcut* pasteTextShortcut = new QShortcut( QKeySequence( tr( "Ctrl+V", "Вставить текст" ) ), tv );
pasteTextShortcut->setContext( Qt::WidgetShortcut );
connect( pasteTextShortcut, SIGNAL( activated() ), this, SLOT( onPasteText() ) );


Название: Re: QLineEdit + undo
Отправлено: kai666_73 от Апрель 06, 2015, 14:16
Сделать что-нибудь по аналогии вот этого shortcut'а вставки текста (наскоро выдрано из проекта,лень править):
QShortcut* pasteTextShortcut = new QShortcut( QKeySequence( tr( "Ctrl+V", "Вставить текст" ) ), tv );
pasteTextShortcut->setContext( Qt::WidgetShortcut );
connect( pasteTextShortcut, SIGNAL( activated() ), this, SLOT( onPasteText() ) );

Правильнее уже использовать
Код
C++ (Qt)
QKeySequence(QKeySequence::Undo)
 


Название: Re: QLineEdit + undo
Отправлено: Igors от Апрель 06, 2015, 14:44
Вообще-то требовалось "отключить" (т.е. сделать так чтобы QLineEdit не сжирал событие и оно приходило на главное меню).  Ну ладно, если разговор зашел, то поясните

- куда (или как) клеить тот shortcut чтобы он сработал и выдал activate
- откуда взять onUndoText (по аналогии), который должен иметь тот же эффект что выбор из меню

Спасибо


Название: Re: QLineEdit + undo
Отправлено: kambala от Апрель 06, 2015, 15:02
а почему стандартный шорткат не работает?


Название: Re: QLineEdit + undo
Отправлено: AlexEx от Апрель 06, 2015, 15:10
Конструктор QShortCut получает в качестве parent'a указатель на lineEdit. setContext( Qt::WidgetShortcut ) означает, что shortcut активен, если parent имеет фокус.


Название: Re: QLineEdit + undo
Отправлено: AlexEx от Апрель 06, 2015, 15:14
З.Ы. onUndoText() - это void QLineEdit::undo () [slot]


Название: Re: QLineEdit + undo
Отправлено: Igors от Апрель 06, 2015, 15:35
а почему стандартный шорткат не работает?
Работает, но не устраивает. Пример: юзер вводит текст - все норм, пока меня устраивает то undo что в QLineEdit. Но вот юзер напр нажал Enter. Данные приняты, окна обновились. Вот теперь мне нужно получать именно событие/сигнал undo а не "текст опять изменен". Др словами после приема данных undo должно выполняться однообразно, фокус не волнует.

Конструктор QShortCut получает в качестве parent'a указатель на lineEdit. setContext( Qt::WidgetShortcut ) означает, что shortcut активен, если parent имеет фокус.
Т.е. и так можно, назначил родителя и работает? Не знал, думал надо еще QAction  :)


Название: Re: QLineEdit + undo
Отправлено: AlexEx от Апрель 06, 2015, 15:49
Если я правильно понимаю ситуацию, то после Enter'a не понятно в каком контроле делать undo. Того гляди QUndoStack придется прикручивать :).


Название: Re: QLineEdit + undo
Отправлено: Igors от Апрель 06, 2015, 15:52
Если я правильно понимаю ситуацию, то после Enter'a не понятно в каком контроле делать undo. Того гляди QUndoStack придется прикручивать :).
Там все прикручено, нужно только чтобы QLineEdit не встревал со своим личным undo


Название: Re: QLineEdit + undo
Отправлено: AlexEx от Апрель 06, 2015, 16:10
На уровне зыбких фантазий, ибо всю картину мне не видно  :): дисконнектить вообще личное undo или соорудить для lineEdit'a свое меню на базе createStandardContextMenu();