Skip to content

Instantly share code, notes, and snippets.

@iamazeem
Created February 14, 2017 12:20
Show Gist options
  • Save iamazeem/3059368231037daf19fcc194dc904277 to your computer and use it in GitHub Desktop.
Save iamazeem/3059368231037daf19fcc194dc904277 to your computer and use it in GitHub Desktop.
#include <QApplication>
#include <QDebug>
#include <QSystemTrayIcon>
#include <QMenu>
#include <QAction>
#include <QIcon>
#include <QThread>
#include <QObject>
#include <QFile>
#include <QIODevice>
#include <QMessageBox>
#include <cstdlib>
class Test : public QThread
{
public:
explicit Test( const int id ) : _id{ id }
{
qDebug() << "Test constructor called! id:" << _id;
}
virtual ~Test()
{
qDebug() << "Test deconstructor called! id:" << _id;
}
void run() override final
{
QFile file { "./test.txt" };
file.open( QIODevice::ReadWrite );
QTextStream stream { &file };
while( !isInterruptionRequested() )
{
qDebug() << "id:" << _id;
stream << "id:" << _id << "\n" << flush;
QThread::sleep( 1 );
}
file.close();
}
private:
int _id;
};
class Test1
{
public:
explicit Test1()
{
qDebug() << "Test1 constructor called!";
}
~Test1()
{
qDebug() << "Test1 deconstructor called!";
}
};
int main( int argc, char *argv[] )
{
QApplication app( argc, argv );
if ( !QSystemTrayIcon::isSystemTrayAvailable() )
{
qDebug() << "Sytem tray is not availabe!";
return 0;
}
QSystemTrayIcon icon {};
QMenu menu {};
menu.addSection( QApplication::tr("Main") );
menu.addAction( QApplication::tr("File") );
menu.addAction( QApplication::tr("Edit") );
menu.addSeparator();
menu.addAction( QApplication::tr("Quit"), []()
{
qDebug() << "Quitting...";
qApp->quit();
});
icon.setIcon( QIcon("c:/icons/undo.ico") );
icon.setContextMenu( &menu );
icon.show();
icon.showMessage( "Test", "Hello World!",
QSystemTrayIcon::Information, 2 );
Test test { 1 };
test.start();
Test1 test1 {};
QObject::connect( &app, &QApplication::aboutToQuit, [&test, &icon]()
{
icon.showMessage( "Quit", "Quitting...",
QSystemTrayIcon::Information, 1 );
qDebug() << "aboutToQuit";
if ( test.isRunning() )
{
test.requestInterruption();
test.wait();
}
});
return app.exec();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment