Название: QSystemTrayIcon и клики мышкой Отправлено: Old от Март 20, 2018, 09:51 Доброе утро, камрады!
Подскажите пожалуйста маководы, как заставить QSystemTrayIcon по разному реагировать на клики левой и правой кнопкой мышки по своей иконки. Название: Re: QSystemTrayIcon и клики мышкой Отправлено: ksk- от Март 20, 2018, 10:06 Есть подозрение, что никак.
Название: Re: QSystemTrayIcon и клики мышкой Отправлено: kambala от Март 20, 2018, 13:26 Qt::MouseButtons QGuiApplication::mouseButtons() не выдает правильную нажатую кнопку?
вообще можно, но только с помощью всяких рантайм-хаков, судя по исходникам. Код если есть возможность править исходники, то задача решается и своими силами несложно :) какая поддерживается минимальная версия макос и какая версия Qt используется? Название: Re: QSystemTrayIcon и клики мышкой Отправлено: Old от Март 20, 2018, 13:38 Qt::MouseButtons QGuiApplication::mouseButtons() не выдает правильную нажатую кнопку? Спасибо за идею. Можно будет попробовать не задавать меню трея, а при активации смотреть какая кнопка мыши нажата и при необходимости показывать меню руками.если есть возможность править исходники, то задача решается и своими силами несложно :) Ох, не хочу я еще и Qt под маком собирать. Этот вариант буду рассматривать в саму последнюю очередь. :)какая поддерживается минимальная версия макос и какая версия Qt используется? macOS Sierra ver 1012.6Qt 5.10 Название: Re: QSystemTrayIcon и клики мышкой Отправлено: Old от Март 20, 2018, 13:49 Спасибо за идею. Можно будет попробовать не задавать меню трея, а при активации смотреть какая кнопка мыши нажата и при необходимости показывать меню руками. Не сработало. :(Всегда возвращает 0 (Qt::NoButton). Название: Re: QSystemTrayIcon и клики мышкой Отправлено: Old от Март 20, 2018, 14:08 Подскажите, а я как-то могу фильтровать/перехватывать события от system tray параллельно с кютешным?
Название: Re: QSystemTrayIcon и клики мышкой Отправлено: ksk- от Март 20, 2018, 15:00 Наверное, более верным решением было бы написать свою обёртку над NSStatusItem, чем пытаться что-то наковырять средствами Qt.
Название: Re: QSystemTrayIcon и клики мышкой Отправлено: Old от Март 20, 2018, 15:17 Наверное, более верным решением было бы написать свою обёртку над NSStatusItem, чем пытаться что-то наковырять средствами Qt. Я mac вижу первый раз, также как и obj-c. :)Если я напишу такую обертку (по аналогии с кютешной), как ее в дальнейшем использовать в плюсовом коде? Название: Re: QSystemTrayIcon и клики мышкой Отправлено: ksk- от Март 20, 2018, 15:27 Проблем с подключением нет.
Можно использовать расширение *.mm у файлов с obj-c++ кодом, чтобы их собирал соответствующий компилятор. Фреймворки Cocoa можно прилинковать так, например (CMake): Код: SET(CMAKE_EXE_LINKER_FLAGS "-framework AppKit -w") Название: Re: QSystemTrayIcon и клики мышкой Отправлено: kambala от Март 20, 2018, 15:40 какая поддерживается минимальная версия макос и какая версия Qt используется? macOS Sierra ver 1012.6Подскажите, а я как-то могу фильтровать/перехватывать события от system tray параллельно с кютешным? теоретически можно через void QCoreApplication::installNativeEventFilter(QAbstractNativeEventFilter *filterObj), но я не пробовалНаверное, более верным решением было бы написать свою обёртку над NSStatusItem, чем пытаться что-то наковырять средствами Qt. можно, конечно, но когда впервые в жизни лезешь в нативный код макос... :)написал небольшой пример по задаче, опирающийся на внутреннее устройство Qt, должен работать на любой версии макос: https://github.com/kambala-decapitator/QtMacSysTrayIconRightClick Название: Re: QSystemTrayIcon и клики мышкой Отправлено: Old от Март 20, 2018, 15:48 действительно, приложение на ОС ниже 10.12.6 не должно запускаться? зачем вы так жестко с юзерами? :) ПО узкоспециализированное. И платформа mac самая не востребованная. Делаю что-бы было. :)написал небольшой пример по задаче, опирающийся на внутреннее устройство Qt, должен работать на любой версии макос: https://github.com/kambala-decapitator/QtMacSysTrayIconRightClick Спасибо. Сейчас посмотрю.Название: Re: QSystemTrayIcon и клики мышкой Отправлено: kambala от Март 20, 2018, 21:32 Цитировать теоретически можно через void QCoreApplication::installNativeEventFilter(QAbstractNativeEventFilter *filterObj), но я не пробовал да, так тоже можно (и никакая рантайм-магия не нужна), так что наверное можно и через обычный фильтр на qApp без залезания в objc :)Название: Re: QSystemTrayIcon и клики мышкой Отправлено: Old от Март 20, 2018, 22:48 да, так тоже можно (и никакая рантайм-магия не нужна), так что наверное можно и через обычный фильтр на qApp без залезания в objc :) kambala, ksk- большое спасибо. |