Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Jkc от Март 08, 2005, 08:51



Название: Как загрузиться в трей
Отправлено: Jkc от Март 08, 2005, 08:51
У меня такая задача, нужно написать программу на C++ с использованием Qt библиотеки.
Что касается окон и элементов то проблем нет но мне нужно ещё что бы при запуске программка пряталась в Трей
 Вопрос как всё это сделать на Qt на систему Win32?  Если кто то сталкивался дайте знать. Буду очень благодарен за пример с кодом.


Название: Как загрузиться в трей
Отправлено: Admin от Март 08, 2005, 09:48
в examples поставляемых вместе с QT есть пример использования tray под windows

смотри и пользуй


Название: Как загрузиться в трей
Отправлено: Jkc от Март 09, 2005, 07:28
Цитата: "Admin"
в examples поставляемых вместе с QT есть пример использования tray под windows

смотри и пользуй


В этом примере просто создаёться трей трёх видов но там нет запуска приложения в трей, так же нет сворачивания окна в трей.


Название: Как загрузиться в трей
Отправлено: mikl2002 от Март 09, 2005, 08:51
menu = new QPopupMenu();
   menu->insertItem( tr("Hide"), form1, SLOT(hide()) );
   menu->insertItem( tr("Show"),form1, SLOT(show()) );
    menu->insertSeparator();
   menu->insertItem( tr("&Quit"), form1, SLOT(close()) );

   tray = new TrayIcon( QPixmap::fromMimeSource( "tray.png" ), tr("SSB  - Boss"), menu);
     QObject::connect(tray,SIGNAL(clicked(const QPoint&)),this,SLOT(hideshow()));
   tray->show();


Название: Как загрузиться в трей
Отправлено: GrolfCry от Март 09, 2005, 14:33
Что нужно подробнее, в примерах и так достаточно хорошо все описано...
Берем файлы
trayicon.cpp
trayicon.h
trayicon_win.cpp
из примеров -ложим в каталог проекта.
В файле проекта добавляем примерно это
Код:

HEADERS =  trayicon.h
SOURCES += main.cpp \
    trayicon.cpp \
    trayicon_win.cpp
IMAGES = images/icon.png

картинка для трея должна лежать в папке images
В main.cpp добавляем в начало файла
Код:

#ifdef Q_WS_WIN
#include "trayicon.h"
#endif // Q_WS_WIN
#include <qpopupmenu.h>
#include <qpixmap.h>


дальше  выглядит примерно так
Код:

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    // ваша форма
MainForm *mf = new MainForm();
app.setMainWidget(mf);
/* createConnections();
mf->dbComboBox1->setConnectionName("SSB");
mf->dbComboBox1->setTableName("persons");

mf->dbComboBox1->setEditable(true);
mf->dbComboBox1->setAutoCompletion(true);
QStringList flds;
flds << "FIO" << "JOB";

mf->dbComboBox1->setEntries(flds);
mf->dbComboBox1->setFilter("1=1");
mf->dbComboBox1->setActiveFilter(QDbComboBox::Both);
mf->dbComboBox1->setOrder("FIO");
*/
// вот добавляем трей
#ifdef Q_WS_WIN
    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();
#endif // Q_WS_WIN

mf->show();
    return app.exec();
}


Название: Как загрузиться в трей
Отправлено: Jkc от Март 16, 2005, 08:45
А как стартонуть что бы сразу в трей?


Название: Как загрузиться в трей
Отправлено: GrolfCry от Март 16, 2005, 08:56
Вот это не делай
 mf->show();


Название: Как загрузиться в трей
Отправлено: Jkc от Март 16, 2005, 11:02
Так просто в трей не грузиться иконка


Название: Как загрузиться в трей
Отправлено: GrolfCry от Март 16, 2005, 11:25
ну тогда
после
mf->show();
сделай
mf->hide();


Название: Как загрузиться в трей
Отправлено: Jkc от Март 16, 2005, 11:59
Работает и последний штрих на эту тему, как по двойному щелчку мыши на иконке вызвать программу?


Название: Как загрузиться в трей
Отправлено: GrolfCry от Март 16, 2005, 13:52
по щелчку - добавь строку
  QObject::connect(tray,SIGNAL(clicked(const QPoint&)),this,SLOT(mf->show()));

по двойному типа того наверное


Название: Как загрузиться в трей
Отправлено: Jkc от Март 16, 2005, 16:48
Есть ещё небольшой вопрос, как из QListView загрузить контектное меню?


Название: Как загрузиться в трей
Отправлено: GrolfCry от Март 17, 2005, 06:25
Не очень понятен вопрос, да и не по теме. Создай новый топик


Название: Как загрузиться в трей
Отправлено: Jkc от Март 18, 2005, 13:07
Можно показать как добавить двойной щелчёк на иконку в трее?


Название: Как загрузиться в трей
Отправлено: homa9999 от Июль 28, 2005, 02:04
А в Linux работает этот код?


Название: Как загрузиться в трей
Отправлено: Sergeich от Июль 28, 2005, 16:27
Нет, конечно, это только для винды


Название: Как загрузиться в трей
Отправлено: Turing от Июль 08, 2006, 21:37
У меня qt4.1.3 + DevCpp. При сборке проекта выскакивает ошибка:
 
release\trayicon_win.o(.text+0x517):0: undefined reference to 'CreateBitmap@4'
release\trayicon_win.o(.text+0x5b9):trayicon_win.cpp: undefined reference to 'DeleteObject@4'
...

Это WinApi функции.
Но ведь при сборке модуля QtGui используются данные функции. И в <wingdi.h> есть их прототипы.
Включение прототипов этих функций в "trayicon_win.cpp" ничего не дает.

Может кто встречался с данной ситуацией?!

добавлено спустя 59 минут:

 Проблема решена LIBS = -lgdi32 -luser32


Название: Как загрузиться в трей
Отправлено: Красаффчег от Июль 11, 2006, 20:08
Признавайтесь!!! У кого в win2k sp4, контекстное меню TrayIcon отображается поверх панели задач, т.е. не в точке где происходит клик левой кнопкой мыши а несколько выше. И кроме этого, у кого иконки загруженные в TrayIcon в формате *.png отображаются в очень тусклых серых тонах???

Напрасно надеялся что в QSystemTrayIcon в версии 4.2 это исправят, аналогичные баги.

Думаю стоит сообщить об этом троллтеховцам.