Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Jkc от Апрель 05, 2005, 12:18



Название: Как по нажатию на [x] прятаться в трей ?
Отправлено: Jkc от Апрель 05, 2005, 12:18
Как по нажатию на
  • прятаться в трей?
Вот main

Код
C++ (Qt)
//...
int main( int argc, char ** argv )
{
  QApplication app( argc, argv );
  Form1 *mf = new  Form1();
  app.setMainWidget(mf);  
   QPopupMenu *menu = new QPopupMenu();
  menu->insertItem( QObject::tr("Hide"),mf , SLOT(hide()) );
  menu->insertItem( QObject::tr("Show"), mf, SLOT(show()) );
   menu->insertSeparator();
  menu->insertItem( QObject::tr("&Quit"), mf, SLOT(close()) );
  TrayIcon *tray = new TrayIcon( QPixmap::fromMimeSource( "icon.png" ), QObject::tr("Tray"), menu);
  tray->show();
SLOT(mf->show()));
    QObject::connect(tray,SIGNAL(clicked(const QPoint&)),mf,SLOT(showNormal()));
  mf->hide();
   return app.exec();
}

При старте программа загружаеться в трей  по двойному щелчку раскрываеться. Как сделать что бы по нажатию на крестик (тот что обычно служит для закрытия окна) что бы программа опять сворачивалась в трей?


Название: Как по нажатию на [x] прятаться в трей ?
Отправлено: Sergeich от Апрель 05, 2005, 12:31
Примерно так:
Код:

Form1::closeEvent(QCloseEvent * e)
{
  tray->show();
}

Form1::showEvent(QShowEvent * e)
{
  tray->hide();
}

И убери app.setMainWidget(mf), иначе при зактрытии окна завершиться приложение.


Название: Как по нажатию на [x] прятаться в трей ?
Отправлено: Jkc от Апрель 05, 2005, 19:27
Строку убрал терерь при клике на крестик окно сворачиваеться в трей.  А вот закрыть приложение из контекстного меню стало невозможно.
И ещё, куда вставлять эти записи ?
Form1::closeEvent(QCloseEvent * e)
{
  tray->show();
}

Form1::showEvent(QShowEvent * e)
{
  tray->hide();
}


Название: Как по нажатию на [x] прятаться в трей ?
Отправлено: tmaxim от Декабрь 23, 2005, 14:34
А как сделать чтобы при разворачивании окна оно не появлялось в тулбаре?


Название: Как по нажатию на [x] прятаться в трей ?
Отправлено: Anton от Март 20, 2006, 07:57
А что за компонент/класс Tray Icon и где его взять?


Название: Как по нажатию на [x] прятаться в трей ?
Отправлено: Dendy от Март 20, 2006, 10:19
ЗакрьІть приложение - не то же самое, что закрьІть окно. Теперь механизм закрьІтия проги нужно делать отдельно, например, в главном меню или меню трея.

closeEvent() - виртуальньІй метод QWidget, через которьІй приходит собьІтие закрьІтия окна.

ЧтобьІ окно не появлялось в тулбаре - ему нужно установить родителем другое окно, при етом оставив top-level:

Код:
int main( int argv, char ** argv )
{
  QApplication app( argc, argv );
  app.setQuitOnLastWindowClosed( false );
  QWidget parent;
  QWidget * my_widget = new QWidget( &parent, Qt::Window );
  my_widget->show();
  return app.exec();
}


Снятие флага quitOnLastWindowClosed необходимо, чтобьІ при первом же закрьІтии окна приложение не вьІшло из главного цикла. Если его при етом не прятать в трей аль не делать ещё какие механизмьІ повторного открьІтия - закрьІть приложение без окна сможете тогода разве что из диспечера задач.

TrayIcon - класс Джастина Карнегеса, автора жабер-клиента Psi. Взять можно из исходников Psi отсюда: http://psi-im.org


Название: Re: Как по нажатию на [x] прятаться в трей ?
Отправлено: Racheengel от Ноябрь 19, 2008, 12:19
А как сделать чтобы при разворачивании окна оно не появлялось в тулбаре?

setWindowFlags(windowFlags() | Qt::Tools);

должно помочь


Название: Re: Как по нажатию на [x] прятаться в трей ?
Отправлено: lit-uriy от Ноябрь 19, 2008, 13:38
судя по дате начала темы, наверно вопрос уже не актуальный.
В Qt4.3.2 есть такой пример
%QTDIR%\examples\desktop\systray


Название: Re: Как по нажатию на [x] прятаться в трей ?
Отправлено: Racheengel от Ноябрь 19, 2008, 13:52
Для топикстартера наверное не актуальный уже :)
Однако я буквально вчера с такой задачей столкнулся, тоже надо сделать подобное - спрятаться в трей, не отображаясь на таскбаре...

Может стоит подобные вопрос в фак/вику закинуть? А то тем миллион уже :)


Название: Re: Как по нажатию на [x] прятаться в трей ?
Отправлено: lit-uriy от Ноябрь 19, 2008, 18:01
на этот вопрос ответ один - смотрите примеры.


Название: Re: Как по нажатию на [x] прятаться в трей ?
Отправлено: Пантер от Ноябрь 19, 2008, 20:13
Ппц. Я офигиваю. Вот только трону какую-нибудь проблему - сразу она всплывает на этом форуме. Как любят говорить на ЛОРе, работает libastral.so. ;D
Я решил так:
Код
C++ (Qt)
Window::closeEvent(QCloseEvent * e)
{
if (!isClose)
{
this->hide();
e->reject();
}
else
e->accept();
}
 
У меня иконка в трэе постоянно висит и мне нужно только скрывать главное окно. isClose объявляю как bool, при криэйте делаю ее false. Еще есть слот
Код
C++ (Qt)
Window::slotExit()
{
isClose=true;
this->close();
}
 
На этот слот конекчу акшн. Решение плохое, но действует. :)