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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как по нажатию на [x] прятаться в трей ?  (Прочитано 9794 раз)
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();
}

При старте программа загружаеться в трей  по двойному щелчку раскрываеться. Как сделать что бы по нажатию на крестик (тот что обычно служит для закрытия окна) что бы программа опять сворачивалась в трей?
« Последнее редактирование: Ноябрь 19, 2008, 14:23 от pastor » Записан
Sergeich
Гость
« Ответ #1 : Апрель 05, 2005, 12:31 »

Примерно так:
Код:

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

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

И убери app.setMainWidget(mf), иначе при зактрытии окна завершиться приложение.
Записан
Jkc
Гость
« Ответ #2 : Апрель 05, 2005, 19:27 »

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

Form1::showEvent(QShowEvent * e)
{
  tray->hide();
}
Записан
tmaxim
Гость
« Ответ #3 : Декабрь 23, 2005, 14:34 »

А как сделать чтобы при разворачивании окна оно не появлялось в тулбаре?
Записан
Anton
Гость
« Ответ #4 : Март 20, 2006, 07:57 »

А что за компонент/класс Tray Icon и где его взять?
Записан
Dendy
Гость
« Ответ #5 : Март 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
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #6 : Ноябрь 19, 2008, 12:19 »

А как сделать чтобы при разворачивании окна оно не появлялось в тулбаре?

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

должно помочь
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #7 : Ноябрь 19, 2008, 13:38 »

судя по дате начала темы, наверно вопрос уже не актуальный.
В Qt4.3.2 есть такой пример
%QTDIR%\examples\desktop\systray
Записан

Юра.
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #8 : Ноябрь 19, 2008, 13:52 »

Для топикстартера наверное не актуальный уже Улыбающийся
Однако я буквально вчера с такой задачей столкнулся, тоже надо сделать подобное - спрятаться в трей, не отображаясь на таскбаре...

Может стоит подобные вопрос в фак/вику закинуть? А то тем миллион уже Улыбающийся
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #9 : Ноябрь 19, 2008, 18:01 »

на этот вопрос ответ один - смотрите примеры.
Записан

Юра.
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #10 : Ноябрь 19, 2008, 20:13 »

Ппц. Я офигиваю. Вот только трону какую-нибудь проблему - сразу она всплывает на этом форуме. Как любят говорить на ЛОРе, работает libastral.so. Смеющийся
Я решил так:
Код
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();
}
 
На этот слот конекчу акшн. Решение плохое, но действует. Улыбающийся
« Последнее редактирование: Ноябрь 19, 2008, 22:57 от panter_dsd » Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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