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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QSystemTray  (Прочитано 5184 раз)
saim
Гость
« : Апрель 16, 2013, 23:21 »

Здравствуйте уважаемое общество ! Помогите з банальной проблемой ! Использую QSystemTray для своего приложения но вот в чем беда , при длительном пребывании в трее к-во иконок увеличивается получается  просто ппц ...  такая штука см Рис
Записан
Bepec
Гость
« Ответ #1 : Апрель 16, 2013, 23:23 »

Какое незаконченное сообщение Улыбающийся
Здравствуйте уважаемое общество ! Помогите з банальной проблемой ! Использую QSystemTray для своего приложения но вот в чем беда , при длительном пребывании в трее к-во иконок увеличивается получается  просто ппц ...  такая штука см Рис

А увеличиваются скорее всего потому, что у тебя создаётся несколько объектов QSystemTray по мере работы программы. Приводи код, разберёмся.
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #2 : Апрель 16, 2013, 23:50 »

Здравствуйте уважаемое общество ! Помогите з банальной проблемой ! Использую QSystemTray для своего приложения но вот в чем беда , при длительном пребывании в трее к-во иконок увеличивается получается  просто ппц ...  такая штука см Рис

прямо магия!
Записан
saim
Гость
« Ответ #3 : Апрель 17, 2013, 00:31 »

Code :
То что у меня в конструкторе :
Код:
     createMessageGroupBox();

    createActions();
    createTrayIcon();
    
    ui->action_DialogSuuport->setShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_S));
    connect (ui->action_DialogSuuport, SIGNAL(triggered()), this, SLOT(dialogSupp()));


    connect(trayIcon , SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
            this , SLOT(iconActivated(QSystemTrayIcon::ActivationReason))) ;

    QVBoxLayout *mainLayout = new QVBoxLayout ;
    mainLayout->addWidget(messageGroupBox);
    setLayout(mainLayout) ;
    QIcon icon_tray (":/sysTray/iconSysTray/tray_02.png");

    trayIcon->setIcon(icon_tray);
    trayIcon->setToolTip(tr("АРМ моніторингу хворих фенілкетонурією "));
    trayIcon->show();

Код:
void ARM::createTrayIcon()
{
    trayIconMenu = new QMenu (this) ;
    trayIconMenu->addAction(restoreAction) ;
    trayIconMenu->addSeparator();
    trayIconMenu->addAction(quit_Action) ;

    trayIcon = new QSystemTrayIcon(this) ;
    trayIcon->setContextMenu(trayIconMenu);
    return;
}
void ARM::createActions()
{
    restoreAction = new QAction(tr("&Відновити"), this) ;
    restoreAction->setIcon(QIcon(":/sysTray/iconSysTray/restore_1.jpg"));
    connect(restoreAction ,SIGNAL(triggered()),this , SLOT(showMaximized())) ;


    quit_Action = new QAction(tr("&Вихід") , this) ;
    quit_Action->setIcon(QIcon(":/sysTray/iconSysTray/exit.jpg"));
    connect(quit_Action , SIGNAL(triggered()) , qApp , SLOT(quit())) ;
    return;
}

void ARM::createMessageGroupBox()
{
    messageGroupBox = new QGroupBox(tr("00000000")) ;
    durationSpinBox = new QSpinBox ;
    durationSpinBox->setValue(10);
    titleEdit = new QLineEdit (tr("АРМ моніторингу хворих фенілкетонурією"));
    bodyEdit = new QTextEdit ;
    bodyEdit->setPlainText(tr("Програма знаходиться в системному треї"));
    QGridLayout *messageLayout = new QGridLayout(0) ;
    messageLayout->addWidget(durationSpinBox , 1, 1);
    messageLayout->addWidget(titleEdit ,2,1,1,4);
    messageLayout->addWidget(bodyEdit , 3,1,2,4);
    messageLayout->setColumnStretch(3,1);
    messageLayout->setRowStretch(4,1);
return;
}
void ARM::messageClicked()
{
    QMessageBox::information(0 , tr("Системний трей") , tr ("АРМ моніторингу хворих фенілкетонурією "));
    return ;
}
void ARM::showMessage()
{
    QSystemTrayIcon::MessageIcon icon = QSystemTrayIcon::Information ;
    trayIcon->showMessage(titleEdit->text() , bodyEdit->toPlainText(), icon ,
                          durationSpinBox->value() * 1000);
    return;
}
//---------------------------------------------------------------------------------------
void ARM::iconActivated(QSystemTrayIcon::ActivationReason reason)
{
    switch (reason) {
    case QSystemTrayIcon::Trigger:
    case QSystemTrayIcon::DoubleClick:
        this->show();
        break;
    case QSystemTrayIcon::MiddleClick:
        showMessage();
        break;
    default:
        ;
    }
    return;
}
void ARM::setVisible(bool visible)
{
    restoreAction->setEnabled(isMaximized() || !visible);
    QMainWindow::setVisible(visible);
    if (visible == true)
    {
        this->restoreAction->setEnabled(false);
    }
    else this->restoreAction->setEnabled(true) ;
    return;
}
//press close
void ARM::closeEvent(QCloseEvent *event)
{
   //this->showMessage () ;
    QMessageBox MsB(0);
    QString ds;
    MsB.setWindowTitle(tr("Системний трей"));
    MsB.setText(tr("Програма буде продовжувати працювати"
                            "в системному треї . \n Для завершення роботи"
                             " натисніть 'Вихід' в \n контексному меню трея"));
    MsB.setStandardButtons(QMessageBox::Yes);
    MsB.setButtonText(QMessageBox::Yes,tr("Так"));
    MsB.setDefaultButton(QMessageBox::Yes);
    MsB.setIcon(QMessageBox::Information);
    QIcon icon_Msb(":/sysTray/iconSysTray/info_02.jpg");
    MsB.setWindowIcon(icon_Msb);
    int r = MsB.exec();
    switch(r)
    {
    case QMessageBox::Yes:
        {
            if(trayIcon->isVisible())
                {
                hide() ;
                event->ignore();
                this->showMessage();
                }
            }

    default:
        break;
        }
    return;
    }
« Последнее редактирование: Апрель 17, 2013, 09:10 от saim » Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #4 : Апрель 17, 2013, 09:37 »

Сразу так и не понятно по коду.
Можно вопрос: зачем в конце каждой процедуры (void функции) вы ставите return?
Да и код немного по индусски написан, не в обиду.
А вообще пройдитесь по исходникам, поищете место вызова создания и регистрации вашего трея, может скорее всего где то он создается еще...
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #5 : Апрель 17, 2013, 10:09 »

Обычно такое бывает если приложение "убивать". Или же не удаляется экземпляр QSystemTrayIcon при выходе из приложения.
Записан
carrygun
Гость
« Ответ #6 : Апрель 17, 2013, 10:15 »

А если потыкать в них или просто навести курсор они не пропадают? А то как писали выше, есть такая "бага".
Записан
saim
Гость
« Ответ #7 : Апрель 17, 2013, 21:17 »

Так спасибо , всем за помощь!

1) я не обижаюсь , все мы учимся ))
2) да пропадают, вот в чем суть когда на иконки навести курсор мышь они все пропадают остаётся только один
« Последнее редактирование: Апрель 17, 2013, 21:29 от saim » Записан
Bepec
Гость
« Ответ #8 : Апрель 18, 2013, 06:50 »

Значит у вас тупо некорректное завершение работы программы. Или вы при дебаге её тормозили с компилятора, или она у вас вылетает, а не закрывается Веселый
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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