Ответы пользователя по тегу macOS
  • QSystemTrayIcon drag-and-drop как?

    vitaly_KF
    @vitaly_KF
    Разработчик Qt/C++
    Так как QSystemTrayIcon всё же нследуется от QObject, то обрабатывать события предназначенные для QWidget он всё же не может. Думаю вариант с прозрачным виджетом вполне подходит. Нет возможности получать от иконки какие-либо события, вроде показа/скрытия, но всё же можно получить его геометрию через
    QRect QSystemTrayIcon::geometry () const
    

    А следовательно можно унаследоваться от QSystemTrayIcon, переопределить
    void QObject::timerEvent ( QTimerEvent * event ) [virtual protected]
    

    и периодически опрашивать геометрию иконки, чтобы перемещать наш прозрачный виджет…

    ну что-то вроде:
    #include <QSystemTrayIcon>
    
     class MySystemTrayIcon : public QSystemTrayIcon, QWidget
     {
         Q_OBJECT
    
     public:
         MySystemTrayIcon(QObject *parent = 0);
    
     protected:
         void timerEvent(QTimerEvent *event);
     };
    
     MySystemTrayIcon::MySystemTrayIcon(QObject *parent)
         : QSystemTrayIcon(parent), QWidget(0)
     {
         startTimer(1000);   // 1-second timer
     }
    
     void MySystemTrayIcon::timerEvent(QTimerEvent *event)
     {
         QWidget::setGeometry (QSystemTrayIcon::geometry());
     }
    


    Не фонтан конечно, но вполне работоспособно… Как ужа не этот виджет вешать drag-and-drop думаю Вы и сами знаете…
    Ответ написан