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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QSystemTrayIcon и клики мышкой  (Прочитано 15003 раз)
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« : Март 20, 2018, 09:51 »

Доброе утро, камрады!

Подскажите пожалуйста маководы, как заставить QSystemTrayIcon по разному реагировать на клики левой и правой кнопкой мышки по своей иконки.
Записан
ksk-
Самовар
**
Offline Offline

Сообщений: 178



Просмотр профиля
« Ответ #1 : Март 20, 2018, 10:06 »

Есть подозрение, что никак.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #2 : Март 20, 2018, 13:26 »

Qt::MouseButtons QGuiApplication::mouseButtons() не выдает правильную нажатую кнопку?

вообще можно, но только с помощью всяких рантайм-хаков, судя по исходникам.
Код
Objective-C
// qcocoasystemtrayicon.mm Qt 5.10.1
if (mouseButton == Qt::MidButton)
   emit systray->activated(QPlatformSystemTrayIcon::MiddleClick);
else
   emit systray->activated(QPlatformSystemTrayIcon::Trigger);
если есть возможность править исходники, то задача решается и своими силами несложно Улыбающийся

какая поддерживается минимальная версия макос и какая версия Qt используется?
Записан

Изучением 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
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #3 : Март 20, 2018, 13:38 »

Qt::MouseButtons QGuiApplication::mouseButtons() не выдает правильную нажатую кнопку?
Спасибо за идею. Можно будет попробовать не задавать меню трея, а при активации смотреть какая кнопка мыши нажата и при необходимости показывать меню руками.

если есть возможность править исходники, то задача решается и своими силами несложно Улыбающийся
Ох, не хочу я еще и Qt под маком собирать. Этот вариант буду рассматривать в саму последнюю очередь. Улыбающийся

какая поддерживается минимальная версия макос и какая версия Qt используется?
macOS Sierra ver 1012.6
Qt 5.10
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #4 : Март 20, 2018, 13:49 »

Спасибо за идею. Можно будет попробовать не задавать меню трея, а при активации смотреть какая кнопка мыши нажата и при необходимости показывать меню руками.
Не сработало. Грустный
Всегда возвращает 0 (Qt::NoButton).
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #5 : Март 20, 2018, 14:08 »

Подскажите, а я как-то могу фильтровать/перехватывать события от system tray параллельно с кютешным?
Записан
ksk-
Самовар
**
Offline Offline

Сообщений: 178



Просмотр профиля
« Ответ #6 : Март 20, 2018, 15:00 »

Наверное, более верным решением было бы написать свою обёртку над NSStatusItem, чем пытаться что-то наковырять средствами Qt.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #7 : Март 20, 2018, 15:17 »

Наверное, более верным решением было бы написать свою обёртку над NSStatusItem, чем пытаться что-то наковырять средствами Qt.
Я mac вижу первый раз, также как и obj-c. Улыбающийся

Если я напишу такую обертку (по аналогии с кютешной), как ее в дальнейшем использовать в плюсовом коде?
Записан
ksk-
Самовар
**
Offline Offline

Сообщений: 178



Просмотр профиля
« Ответ #8 : Март 20, 2018, 15:27 »

Проблем с подключением нет.

Можно использовать расширение *.mm у файлов с obj-c++ кодом, чтобы их собирал соответствующий компилятор.

Фреймворки Cocoa можно прилинковать так, например (CMake):
Код:
SET(CMAKE_EXE_LINKER_FLAGS "-framework AppKit -w")
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #9 : Март 20, 2018, 15:40 »

какая поддерживается минимальная версия макос и какая версия Qt используется?
macOS Sierra ver 1012.6
действительно, приложение на ОС ниже 10.12.6 не должно запускаться? зачем вы так жестко с юзерами? Улыбающийся
Подскажите, а я как-то могу фильтровать/перехватывать события от system tray параллельно с кютешным?
теоретически можно через void QCoreApplication::installNativeEventFilter(QAbstractNativeEventFilter *filterObj), но я не пробовал
Наверное, более верным решением было бы написать свою обёртку над NSStatusItem, чем пытаться что-то наковырять средствами Qt.
можно, конечно, но когда впервые в жизни лезешь в нативный код макос... Улыбающийся

написал небольшой пример по задаче, опирающийся на внутреннее устройство Qt, должен работать на любой версии макос: https://github.com/kambala-decapitator/QtMacSysTrayIconRightClick
Записан

Изучением 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
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #10 : Март 20, 2018, 15:48 »

действительно, приложение на ОС ниже 10.12.6 не должно запускаться? зачем вы так жестко с юзерами? Улыбающийся
ПО узкоспециализированное. И платформа mac самая не востребованная. Делаю что-бы было. Улыбающийся

написал небольшой пример по задаче, опирающийся на внутреннее устройство Qt, должен работать на любой версии макос: https://github.com/kambala-decapitator/QtMacSysTrayIconRightClick
Спасибо. Сейчас посмотрю.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #11 : Март 20, 2018, 21:32 »

Цитировать
теоретически можно через void QCoreApplication::installNativeEventFilter(QAbstractNativeEventFilter *filterObj), но я не пробовал
да, так тоже можно (и никакая рантайм-магия не нужна), так что наверное можно и через обычный фильтр на qApp без залезания в objc Улыбающийся
Записан

Изучением 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
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #12 : Март 20, 2018, 22:48 »

да, так тоже можно (и никакая рантайм-магия не нужна), так что наверное можно и через обычный фильтр на qApp без залезания в objc Улыбающийся
kambala, ksk- большое спасибо.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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