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

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

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: Вот тебе, бабушка, и doubleClick...  (Прочитано 16393 раз)
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


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

Потребовалось в QTableWidget обработать отдельно одинарный клик на ячейку, отдельно двойной. Всё нарисовано в Дизайнере, там же и созданы слоты для сигналов таблицы.

Код:
void ManagerDialog::on_tableWidget_cellClicked(int row, int column)
{
    qDebug() << "single";
}

void ManagerDialog::on_tableWidget_cellDoubleClicked(int row, int column)
{
    qDebug() << "double";
}

qDebug вставил, когда увидел, что при двойном клике на ячейку получаю совсем не то, что ожидал. А выдаёт при двойном клике на строку таблицы вот что:

Цитировать
single
double
single
Шокированный

Скорость нажатия ни при чем - и дабл срабатывает, и у меня средняя кнопка мыши всегда двойной клик выдает, нигде проблем не было последние годы. Поискал в Инете - несколько человек с таким столкнулись, но нормального решения не видно.

Может я пропустил чего? Сорри, если боян - никогда до сих пор не требовалось двойного клика на таблицу с нередактируемыми ячейками.
Записан

2^7-1 == 127, задумайтесь...
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


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

На сколько я помню, придется самому реализовать игнорирование одинарного клика в течении n времени (можно у QApplication получить, вроде).
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Bepec
Гость
« Ответ #2 : Апрель 01, 2015, 15:33 »

Это как бы логично на мой взгляд и всегда так работало.
PS не вижу способа кроме костыля, который будет игнорить нажатия Веселый
Записан
PimenS
Крякер
****
Offline Offline

Сообщений: 371


Просмотр профиля
« Ответ #3 : Апрель 01, 2015, 15:38 »

А если попробовать через void QWidget::mouseDoubleClickEvent(QMouseEvent * event)?
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #4 : Апрель 01, 2015, 15:39 »

На сколько я помню, придется самому реализовать игнорирование одинарного клика в течении n времени (можно у QApplication получить, вроде).

Прям аж скрипом несмазанных Окон повеяло...  Злой
Записан

2^7-1 == 127, задумайтесь...
Bepec
Гость
« Ответ #5 : Апрель 01, 2015, 15:40 »

Угу, прям скрип прямо несмазанных.
И никогда не появится тема - "Как хорошо что Qt обрабатывает double click как 2 click, это ведь так хорошо в моём проекте".

PS ругаете правильную вещь, а зря Улыбающийся
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #6 : Апрель 01, 2015, 15:41 »

А если попробовать через void QWidget::mouseDoubleClickEvent(QMouseEvent * event)?

выяснять, в какую ячейку таблицы кликнули, сложнее, чем интервал времени "отождать"
Записан

2^7-1 == 127, задумайтесь...
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #7 : Апрель 01, 2015, 15:43 »

Угу, прям скрип прямо несмазанных.
И никогда не появится тема - "Как хорошо что Qt обрабатывает double click как 2 click, это ведь так хорошо в моём проекте".

PS ругаете правильную вещь, а зря Улыбающийся

Неужели кому-то когда-то где-то потребовалось прямо в таблице выделять из даблклика первый клик или последний?? Даблклик - это должно быть на системном уровне одно действие, а не два. И тем более, не три.

Причем, это только на ячейках таблицы. Например, на айтемах графической сцены всё нормально работает - даблклик это дабл, а сингл это сингл.
« Последнее редактирование: Апрель 01, 2015, 15:46 от Гурман » Записан

2^7-1 == 127, задумайтесь...
Bepec
Гость
« Ответ #8 : Апрель 01, 2015, 15:52 »

Не соглашусь) каждое действие пользователя должно быть отображено "на уровне системы". А дабл клик это именно два клика. Не полтора, не один и четвертинка, а именно два клика Улыбающийся
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


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

Два клика - это НЕ ТРИ СИГНАЛА!

И для исключения подобных ситуаций надо иметь настройку типа QTableWidget::setProcessDoubleClickSeparately(bool) - причем именно у виджета таблицы, поскольку в остальных местах нормально работает

хотя бы потому, что в 99.99% случаев в реальной жизни надо обрабатывать двойной клик и одинарный как единые цельные команды, и только в 0.01% случаев надо выделять из двойного клика первый и второй
« Последнее редактирование: Апрель 01, 2015, 16:00 от Гурман » Записан

2^7-1 == 127, задумайтесь...
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


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

Цитировать
single
double
single
Шокированный
Много лет я (как и другие) отслеживал сам двойной клик, такого события просто не было в ОС. Тут дают - еще и недоволен. Нужно отбросить третий - ну так фильтрок, засейвил последнее время double и сравнил, всех делов 5 мин. Ну зажрались и обленились  Плачущий
Записан
PimenS
Крякер
****
Offline Offline

Сообщений: 371


Просмотр профиля
« Ответ #11 : Апрель 01, 2015, 16:07 »

выяснять, в какую ячейку таблицы кликнули, сложнее, чем интервал времени "отождать"

Можно подробнее. Не пойму в чем сложность получения currentIndex() или currentItem()?
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


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

Много лет назад я на Ассемблере сам прерывания обрабатывал, и вызывает неподдельное удивление, что в ТАКОМ высокоуровневом фреймворке, как Qt далеко не первой версии, приходится сползать чуть ли не на тот же уровень.

Скорее всего, просто авторы забыли, как и во многих других местах. Придётся suggestion писать, чтобы сделали отключение этой ненужной фичи.
Записан

2^7-1 == 127, задумайтесь...
Bepec
Гость
« Ответ #13 : Апрель 01, 2015, 16:13 »

Последняя реплика явно не в тему, хотя пишите пишите - думаю вам ответят, что вы неправы Улыбающийся

Дабл клик это 3 (ТРИ) события. Это 2 нажатия мышки и после их обработки событие двойного клика.

Тут попутан просто порядок, хотя тоже можно поспорить Улыбающийся
Записан
sociopath
Гость
« Ответ #14 : Апрель 01, 2015, 16:19 »

Всегда ловил при даблклике сначала сигнал на singleClick, потом сигнал на doubleClick (итого 2), на Qt 4.5, 4.6 и 4.8 под WIN и X11. А вообще мне что-то очень сомнительно, что количество этих сигналов как-либо регламентировано (не говоря уж про их порядок).
Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


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