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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QLineEdit + undo  (Прочитано 7562 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Апрель 06, 2015, 11:13 »

Добрый день

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

Спасибо
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Апрель 06, 2015, 11:24 »

Невесить QShortcut.
Записан

Qt 5.11/4.8.7 (X11/Win)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Апрель 06, 2015, 12:09 »

Невесить QShortcut.
Не очень понял, наверное addAction (где делать то же что из меню), а той action назначить shortcut. Тогда надо самому подсвечивать меню и проверять доступно ли сейчас undo.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Апрель 06, 2015, 12:24 »

А разве про меню хоть что-то упоминалось?
Записан

Qt 5.11/4.8.7 (X11/Win)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Апрель 06, 2015, 13:40 »

А разве про меню хоть что-то упоминалось?
Мной упоминалось (см первый пост), а что Вы имели ввиду - не знаю  Улыбающийся

Получилось, "не то фильтровал", надо было QEvent::ShortcutOverride
Записан
AlexEx
Чайник
*
Offline Offline

Сообщений: 76


Просмотр профиля
« Ответ #5 : Апрель 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() ) );
Записан
kai666_73
Крякер
****
Offline Offline

Сообщений: 319


Просмотр профиля
« Ответ #6 : Апрель 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)
 
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Апрель 06, 2015, 14:44 »

Вообще-то требовалось "отключить" (т.е. сделать так чтобы QLineEdit не сжирал событие и оно приходило на главное меню).  Ну ладно, если разговор зашел, то поясните

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

Спасибо
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #8 : Апрель 06, 2015, 15:02 »

а почему стандартный шорткат не работает?
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
AlexEx
Чайник
*
Offline Offline

Сообщений: 76


Просмотр профиля
« Ответ #9 : Апрель 06, 2015, 15:10 »

Конструктор QShortCut получает в качестве parent'a указатель на lineEdit. setContext( Qt::WidgetShortcut ) означает, что shortcut активен, если parent имеет фокус.
Записан
AlexEx
Чайник
*
Offline Offline

Сообщений: 76


Просмотр профиля
« Ответ #10 : Апрель 06, 2015, 15:14 »

З.Ы. onUndoText() - это void QLineEdit::undo () [slot]
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #11 : Апрель 06, 2015, 15:35 »

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

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

Сообщений: 76


Просмотр профиля
« Ответ #12 : Апрель 06, 2015, 15:49 »

Если я правильно понимаю ситуацию, то после Enter'a не понятно в каком контроле делать undo. Того гляди QUndoStack придется прикручивать Улыбающийся.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #13 : Апрель 06, 2015, 15:52 »

Если я правильно понимаю ситуацию, то после Enter'a не понятно в каком контроле делать undo. Того гляди QUndoStack придется прикручивать Улыбающийся.
Там все прикручено, нужно только чтобы QLineEdit не встревал со своим личным undo
Записан
AlexEx
Чайник
*
Offline Offline

Сообщений: 76


Просмотр профиля
« Ответ #14 : Апрель 06, 2015, 16:10 »

На уровне зыбких фантазий, ибо всю картину мне не видно  Улыбающийся: дисконнектить вообще личное undo или соорудить для lineEdit'a свое меню на базе createStandardContextMenu();
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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