Skip to content

Commit 0701540

Browse files
authored
Merge pull request #3 from MeshAndrey/SystemTray
System tray
2 parents 885e02d + 9a300f7 commit 0701540

File tree

5 files changed

+70
-0
lines changed

5 files changed

+70
-0
lines changed

resources/images/README.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<a href="https://www.flaticon.com/free-icons/timer" title="timer icons">Timer icons created by Freepik - Flaticon</a>

resources/images/timer.png

412 Bytes
Loading

resources/resources.qrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<RCC>
22
<qresource prefix="/">
33
<file>sounds/mixkit-urgent-simple-tone-loop-2976.wav</file>
4+
<file>images/timer.png</file>
45
</qresource>
56
</RCC>

src/MainWindow.cpp

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include "MainWindow.h"
22
#include "widgets/InputWidget.h"
33
#include <QScrollArea>
4+
#include <QCloseEvent>
45

56
MainWindow::MainWindow(QWidget *parent)
67
: QMainWindow(parent)
@@ -22,6 +23,28 @@ MainWindow::MainWindow(QWidget *parent)
2223
area->horizontalScrollBar()->setVisible(false);
2324
area->setWidget(centralWidget);
2425

26+
setWindowIcon(QIcon(":/images/timer.png"));
27+
28+
QAction* showHideAction =
29+
new QAction("&Show/Hide Application Window", this);
30+
31+
connect(showHideAction, &QAction::triggered,
32+
this, &MainWindow::showHideWindow);
33+
34+
QAction* quitAction = new QAction("&Quit", this);
35+
connect(quitAction, &QAction::triggered,
36+
qApp, &QApplication::quit);
37+
38+
trayIconMenu = new QMenu(this);
39+
trayIconMenu->addAction(showHideAction);
40+
trayIconMenu->addAction(quitAction);
41+
42+
trayIcon = new QSystemTrayIcon(this);
43+
trayIcon->setContextMenu(trayIconMenu);
44+
trayIcon->setToolTip("Timer app");
45+
trayIcon->setIcon(QIcon(":/images/timer.png"));
46+
trayIcon->show();
47+
2548
setCentralWidget(area);
2649
}
2750

@@ -35,6 +58,11 @@ void MainWindow::addButtonClicked()
3558
void MainWindow::replaceWidget(QWidget* oldWidget,
3659
QWidget* newWidget)
3760
{
61+
if (!this->isVisible())
62+
{
63+
show();
64+
}
65+
3866
auto old = layout->replaceWidget(oldWidget, newWidget, Qt::FindDirectChildrenOnly)->widget();
3967

4068
if (old == nullptr)
@@ -63,6 +91,38 @@ void MainWindow::showMessageBox(QString message)
6391
msg.exec();
6492
}
6593

94+
void MainWindow::showHideWindow()
95+
{
96+
setVisible(!isVisible());
97+
}
98+
void MainWindow::showEvent(QShowEvent* event)
99+
{
100+
QMainWindow::showEvent(event);
101+
102+
QSettings settings("MyCompany", "MyApp");
103+
this->restoreGeometry(settings.value("geometry").toByteArray());
104+
this->restoreState(settings.value("windowState").toByteArray());
105+
}
106+
107+
void MainWindow::hideEvent(QHideEvent* event)
108+
{
109+
QMainWindow::hideEvent(event);
110+
111+
QSettings settings("MyCompany", "MyApp");
112+
settings.setValue("geometry", saveGeometry());
113+
settings.setValue("windowState", saveState());
114+
}
115+
116+
void MainWindow::closeEvent(QCloseEvent* event)
117+
{
118+
QMainWindow::closeEvent(event);
119+
120+
if (this->isVisible()) {
121+
hide();
122+
}
123+
event->ignore();
124+
}
125+
66126
MainWindow::~MainWindow()
67127
{
68128
}

src/MainWindow.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include <QMainWindow>
55
#include <QVBoxLayout>
66
#include <QPushButton>
7+
#include <QSystemTrayIcon>
78

89
class MainWindow : public QMainWindow
910
{
@@ -12,9 +13,16 @@ class MainWindow : public QMainWindow
1213
QVBoxLayout *layout = nullptr;
1314
QWidget *centralWidget = nullptr;
1415
QPushButton* addButton = nullptr;
16+
QSystemTrayIcon* trayIcon;
17+
QMenu* trayIconMenu;
18+
19+
void showEvent(QShowEvent* event);
20+
void hideEvent(QHideEvent* event);
21+
void closeEvent(QCloseEvent* event);
1522

1623
private slots:
1724
void addButtonClicked();
25+
void showHideWindow();
1826

1927
public:
2028
MainWindow(QWidget *parent = nullptr);

0 commit comments

Comments
 (0)