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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QSystemTrayIcon, не всегда появляется меню  (Прочитано 2028 раз)
Narsil
Гость
« : Ноябрь 26, 2010, 12:25 »

Вот маленькое тестовое приложение:

MyApp.h
Код
C++ (Qt)
#ifndef MYAPP_H
#define MYAPP_H
 
#include <QApplication>
#include <QSystemTrayIcon>
#include <QAction>
#include <QMenu>
 
class MyApp : public QApplication
{
   Q_OBJECT
public:
   MyApp(int & argc, char ** argv);
   ~MyApp();
private:
   void createActions();
   void createTrayIcon();
 
signals:
 
public slots:
   void   statusTriggered();
   void iconActivated(QSystemTrayIcon::ActivationReason);
 
public:
   QSystemTrayIcon *trayIcon;
   QMenu *trayIconMenu;
 
   QAction *statusAction;
   QAction *quitAction;
};
 
#endif // MYAPP_H
 

MyApp.cpp
Код
C++ (Qt)
#include "myapp.h"
 
#include <QPushButton>
#include <QDateTime>
 
MyApp::MyApp(int & argc, char ** argv) : QApplication(argc, argv) {
 
   setQuitOnLastWindowClosed(false);
   createActions();
   createTrayIcon();
 
   QIcon icon(":/images/icon.png");
 
   connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
                this, SLOT(iconActivated(QSystemTrayIcon::ActivationReason)));
 
   trayIcon->setIcon(icon);
   trayIcon->show();
}
 
MyApp::~MyApp(){
   delete trayIcon;
}
 
void MyApp::iconActivated(QSystemTrayIcon::ActivationReason reason)
{
   QPushButton btn("Lala");
    switch (reason) {
    case QSystemTrayIcon::Trigger:
        btn.show();
        break;
    default:
        break;
    }
}
 
 
void MyApp::statusTriggered() {
}
 
 
void MyApp::createActions() {
 
   statusAction = new QAction("Status", this);
   connect(statusAction, SIGNAL(triggered()), this, SLOT(statusTriggered()));
 
   quitAction = new QAction("Quit", this);
   connect(quitAction, SIGNAL(triggered()), this, SLOT(quit()));
 
}
 
void MyApp::createTrayIcon() {
   trayIconMenu = new QMenu;
   trayIconMenu->addAction(statusAction);
   trayIconMenu->addSeparator();
   trayIconMenu->addAction(quitAction);
 
   trayIcon = new QSystemTrayIcon(this);
   trayIcon->setContextMenu(trayIconMenu);
}
 

main.cpp очевидный:
Код
C++ (Qt)
#include <QtGui/QApplication>
#include "myapp.h"
 
int main(int argc, char *argv[])
{
   MyApp a(argc, argv);
   return a.exec();
}
 

Так вот. Тыкаем правой кнопкой на иконке в трее, выбираем Status. Т.к. в слоте у нас пусто - ничего не происходит. Тыкаем ещё раз кнопкой - и фигушки, меню больше не вылезает. Я борюсь с этим, перехватывая левую кнопку мыши и быстро показывая и уничтожая кнопку (бред, но меня спасает), после того как кнопка моргнёт, вылезает менюшка от прошлого правого клика.

Кто может объяснить такое странное поведение и как с ним бороться?

WinXP sp3, Qt 4.6.2 (собирал с -static), на Qt 4.7.0 такое же поведение.

« Последнее редактирование: Ноябрь 26, 2010, 12:29 от Narsil » Записан
Narsil
Гость
« Ответ #1 : Ноябрь 30, 2010, 20:01 »

Ребят, вы хоть проверьте и отпишитесь, у меня у одного такой глюк или у вас тоже?

ЗЫЖ: не знаю, законно ли тут писать 2 сообщения подряд или необходимо редактировать старое. Не обессудьте, если что.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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