mirror of
https://gitea.msk.dinamika-avia.ru/Constanta-Design/RRJServer.git
synced 2026-03-27 19:45:43 +03:00
Server в Трее 1
This commit is contained in:
@@ -2,7 +2,7 @@ project(TestServerLMS LANGUAGES CXX)
|
||||
|
||||
common_info_for_project(TestServerLMS)
|
||||
|
||||
add_executable(TestServerLMS
|
||||
add_executable(TestServerLMS WIN32
|
||||
main.cpp
|
||||
mainwindow.cpp
|
||||
mainwindow.h
|
||||
|
||||
@@ -6,6 +6,6 @@ int main(int argc, char *argv[])
|
||||
{
|
||||
QApplication a(argc, argv);
|
||||
MainWindow w;
|
||||
w.show();
|
||||
//w.show();
|
||||
return a.exec();
|
||||
}
|
||||
|
||||
@@ -6,7 +6,8 @@
|
||||
MainWindow::MainWindow(QWidget *parent) :
|
||||
QMainWindow(parent),
|
||||
ui(new Ui::MainWindow),
|
||||
m_serverLMSWidget(nullptr)
|
||||
m_serverLMSWidget(nullptr),
|
||||
trayIcon(nullptr)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
@@ -19,13 +20,130 @@ MainWindow::MainWindow(QWidget *parent) :
|
||||
|
||||
connect(this, &MainWindow::signal_LanguageChanged, m_serverLMSWidget, &ServerLMSWidget::slot_LanguageChanged);
|
||||
|
||||
this->move(0, 0);
|
||||
this->showNormal();
|
||||
//this->move(0, 0);
|
||||
//this->showNormal();
|
||||
|
||||
errorCheck();
|
||||
//this->showMaximized();
|
||||
|
||||
/* Инициализируем иконку трея, устанавливаем иконку из набора системных иконок,
|
||||
* а также задаем всплывающую подсказку
|
||||
* */
|
||||
trayIcon = new QSystemTrayIcon(this);
|
||||
//trayIcon->setIcon(this->style()->standardIcon(QStyle::SP_ComputerIcon));
|
||||
trayIcon->setIcon(QPixmap(":/resources/IcoServerRRJ.ico"));
|
||||
trayIcon->setToolTip(tr("Server LMS"));
|
||||
|
||||
/* После чего создаем контекстное меню из двух пунктов*/
|
||||
QMenu * menu = new QMenu(this);
|
||||
QAction * viewWindow = new QAction(trUtf8("Развернуть окно"), this);
|
||||
QAction * hideWindow = new QAction(trUtf8("Свернуть окно"), this);
|
||||
QAction * quitAction = new QAction(trUtf8("Выход"), this);
|
||||
|
||||
/* подключаем сигналы нажатий на пункты меню к соответсвующим слотам.
|
||||
* Первый пункт меню разворачивает приложение из трея,
|
||||
* а второй пункт меню завершает приложение
|
||||
* */
|
||||
connect(viewWindow, SIGNAL(triggered()), this, SLOT(show()));
|
||||
connect(hideWindow, SIGNAL(triggered()), this, SLOT(hide()));
|
||||
connect(quitAction, SIGNAL(triggered()), this, SLOT(close()));
|
||||
|
||||
menu->addAction(viewWindow);
|
||||
menu->addAction(hideWindow);
|
||||
menu->addAction(quitAction);
|
||||
|
||||
/* Устанавливаем контекстное меню на иконку
|
||||
* и показываем иконку приложения в трее
|
||||
* */
|
||||
trayIcon->setContextMenu(menu);
|
||||
trayIcon->show();
|
||||
|
||||
/* Также подключаем сигнал нажатия на иконку к обработчику
|
||||
* данного нажатия
|
||||
* */
|
||||
connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
|
||||
this, SLOT(iconActivated(QSystemTrayIcon::ActivationReason)));
|
||||
|
||||
//this->hide();
|
||||
//this->close();
|
||||
//this->showEvent();
|
||||
|
||||
QSystemTrayIcon::MessageIcon icon = QSystemTrayIcon::MessageIcon(QSystemTrayIcon::Information);
|
||||
trayIcon->showMessage(tr("Server LMS"),
|
||||
tr("Приложение свернуто в трей. Для того чтобы, "
|
||||
"развернуть окно приложения, щелкните по иконке приложения в трее"),
|
||||
icon,
|
||||
2000);
|
||||
}
|
||||
|
||||
/* Метод, который обрабатывает событие закрытия окна приложения
|
||||
* */
|
||||
void MainWindow::closeEvent(QCloseEvent * event)
|
||||
{
|
||||
/* Если окно видимо и чекбокс отмечен, то завершение приложения
|
||||
* игнорируется, а окно просто скрывается, что сопровождается
|
||||
* соответствующим всплывающим сообщением
|
||||
*/
|
||||
if(this->isVisible() /*&& ui->trayCheckBox->isChecked()*/)
|
||||
{
|
||||
//flFirstShow = false;
|
||||
|
||||
event->ignore();
|
||||
this->hide();
|
||||
QSystemTrayIcon::MessageIcon icon = QSystemTrayIcon::MessageIcon(QSystemTrayIcon::Information);
|
||||
|
||||
trayIcon->showMessage(tr("Server LMS"),
|
||||
tr("Приложение свернуто в трей. Для того чтобы, "
|
||||
"развернуть окно приложения, щелкните по иконке приложения в трее"),
|
||||
icon,
|
||||
2000);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
void MainWindow::showEvent(QShowEvent *event)
|
||||
{
|
||||
QMainWindow::showEvent(event);
|
||||
|
||||
if(flFirstShow)
|
||||
this->close();
|
||||
}*/
|
||||
|
||||
/* Метод, который обрабатывает нажатие на иконку приложения в трее
|
||||
* */
|
||||
void MainWindow::iconActivated(QSystemTrayIcon::ActivationReason reason)
|
||||
{
|
||||
switch (reason){
|
||||
case QSystemTrayIcon::Trigger:
|
||||
/* Событие игнорируется в том случае, если чекбокс не отмечен
|
||||
* */
|
||||
//if(ui->trayCheckBox->isChecked())
|
||||
{
|
||||
/* иначе, если окно видимо, то оно скрывается,
|
||||
* и наоборот, если скрыто, то разворачивается на экран
|
||||
* */
|
||||
if(!this->isVisible()){
|
||||
this->show();
|
||||
} else
|
||||
{
|
||||
this->hide();
|
||||
|
||||
QSystemTrayIcon::MessageIcon icon = QSystemTrayIcon::MessageIcon(QSystemTrayIcon::Information);
|
||||
|
||||
trayIcon->showMessage(tr("Server LMS"),
|
||||
tr("Приложение свернуто в трей. Для того чтобы, "
|
||||
"развернуть окно приложения, щелкните по иконке приложения в трее"),
|
||||
icon,
|
||||
2000);
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void MainWindow::exit()
|
||||
{
|
||||
QApplication::exit(0);
|
||||
|
||||
@@ -5,6 +5,10 @@
|
||||
#include <QTranslator>
|
||||
#include <QEvent>
|
||||
|
||||
#include <QCloseEvent>
|
||||
#include <QSystemTrayIcon>
|
||||
#include <QAction>
|
||||
|
||||
#include "serverlmswidget.h"
|
||||
|
||||
|
||||
@@ -25,6 +29,18 @@ protected:
|
||||
// В нём будет производиться проверка события смены перевода приложения
|
||||
void changeEvent(QEvent * event) override;
|
||||
|
||||
/* Виртуальная функция родительского класса в нашем классе
|
||||
* переопределяется для изменения поведения приложения,
|
||||
* чтобы оно сворачивалось в трей, когда мы этого хотим
|
||||
*/
|
||||
void closeEvent(QCloseEvent * event);
|
||||
|
||||
private slots:
|
||||
/* Слот, который будет принимать сигнал от события
|
||||
* нажатия на иконку приложения в трее
|
||||
*/
|
||||
void iconActivated(QSystemTrayIcon::ActivationReason reason);
|
||||
|
||||
signals:
|
||||
//сигнал об изменении языка интерфейса
|
||||
void signal_LanguageChanged(QString language);
|
||||
@@ -32,11 +48,16 @@ signals:
|
||||
private slots:
|
||||
void on_cmbLanguage_currentIndexChanged(const QString &arg1);
|
||||
|
||||
private:
|
||||
void exit();
|
||||
void errorCheck();
|
||||
|
||||
private:
|
||||
Ui::MainWindow *ui;
|
||||
ServerLMSWidget* m_serverLMSWidget;
|
||||
QTranslator qtLanguageTranslator;
|
||||
void exit();
|
||||
void errorCheck();
|
||||
|
||||
/* Объявляем объект будущей иконки приложения для трея */
|
||||
QSystemTrayIcon* trayIcon;
|
||||
};
|
||||
#endif // MAINWINDOW_H
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
<RCC>
|
||||
<qresource prefix="/"/>
|
||||
<qresource prefix="/">
|
||||
<file>resources/IcoServerRRJ.ico</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
||||
Reference in New Issue
Block a user