Название: QSystemTray
Отправлено: saim от Апрель 16, 2013, 23:21
Здравствуйте уважаемое общество ! Помогите з банальной проблемой ! Использую QSystemTray для своего приложения но вот в чем беда , при длительном пребывании в трее к-во иконок увеличивается получается просто ппц ... такая штука см Рис
Название: Re: QSystemTray
Отправлено: Bepec от Апрель 16, 2013, 23:23
Какое незаконченное сообщение :) Здравствуйте уважаемое общество ! Помогите з банальной проблемой ! Использую QSystemTray для своего приложения но вот в чем беда , при длительном пребывании в трее к-во иконок увеличивается получается просто ппц ... такая штука см Рис
А увеличиваются скорее всего потому, что у тебя создаётся несколько объектов QSystemTray по мере работы программы. Приводи код, разберёмся.
Название: Re: QSystemTray
Отправлено: Alex Custov от Апрель 16, 2013, 23:50
Здравствуйте уважаемое общество ! Помогите з банальной проблемой ! Использую QSystemTray для своего приложения но вот в чем беда , при длительном пребывании в трее к-во иконок увеличивается получается просто ппц ... такая штука см Рис
прямо магия!
Название: Re: QSystemTray
Отправлено: saim от Апрель 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; }
Название: Re: QSystemTray
Отправлено: Fregloin от Апрель 17, 2013, 09:37
Сразу так и не понятно по коду. Можно вопрос: зачем в конце каждой процедуры (void функции) вы ставите return? Да и код немного по индусски написан, не в обиду. А вообще пройдитесь по исходникам, поищете место вызова создания и регистрации вашего трея, может скорее всего где то он создается еще...
Название: Re: QSystemTray
Отправлено: ecspertiza от Апрель 17, 2013, 10:09
Обычно такое бывает если приложение "убивать". Или же не удаляется экземпляр QSystemTrayIcon при выходе из приложения.
Название: Re: QSystemTray
Отправлено: carrygun от Апрель 17, 2013, 10:15
А если потыкать в них или просто навести курсор они не пропадают? А то как писали выше, есть такая "бага".
Название: Re: QSystemTray
Отправлено: saim от Апрель 17, 2013, 21:17
Так спасибо , всем за помощь!
1) я не обижаюсь , все мы учимся )) 2) да пропадают, вот в чем суть когда на иконки навести курсор мышь они все пропадают остаётся только один
Название: Re: QSystemTray
Отправлено: Bepec от Апрель 18, 2013, 06:50
Значит у вас тупо некорректное завершение работы программы. Или вы при дебаге её тормозили с компилятора, или она у вас вылетает, а не закрывается :D
|