Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions cpp/Mymodel.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#include "Mymodel.h"

MyModel::MyModel(QObject *parent)
{
m_struct.append(MyStruct{"url","name"});
}
QVariant MyModel::data(const QModelIndex &index, int role) const
{
if(index.row() < 0 || index.row() > m_struct.size())
return QVariant();

switch (role) {
case sourceSong:
m_struct.at(index.row());
case nameSong:
m_struct.at(index.row());
}
}

QHash<int, QByteArray> MyModel::roleName() const
{
QHash<int, QByteArray> roleName;
roleName[sourceSong] = "source";
roleName[nameSong] = "name";
return roleName;
}

void MyModel::append(QString source, QString name)
{
m_struct.append(MyStruct{source,name});
}



int MyModel::rowCount(const QModelIndex &parent) const
{
return m_struct.size();
}
37 changes: 37 additions & 0 deletions cpp/Mymodel.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
#ifndef MODEL_H
#define MODEL_H

#include <QQuickItem>
#include <QObject>
#include <QAbstractListModel>

struct MyStruct
{
QString source;
QString name;
};

class MyModel : public QAbstractListModel
{
Q_OBJECT

enum songInfo
{
sourceSong=Qt::DisplayRole,
nameSong
};

public:
MyModel(QObject *parent = 0);

QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const override;
QHash<int,QByteArray> roleName() const;
Q_INVOKABLE void append(QString source,QString name);

int rowCount(const QModelIndex &parent = QModelIndex()) const override;
private:
QList<MyStruct> m_struct;

};

#endif // MODEL_H
38 changes: 38 additions & 0 deletions cpp/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include <QSystemTrayIcon>
#include <QApplication>
#include <QSettings>

#include <tray.h>
#include <qmltranslator.h>
#include <save.h>
#include <Mymodel.h>

int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

QApplication app(argc, argv);

QQmlApplicationEngine engine;
Tray * systemTray = new Tray();
QQmlContext * context = engine.rootContext();
QmlTranslator qmlTranslator;
Save * saves= new Save();
MyModel mymodel;

qmlTranslator.setTranslation(saves->langugeLoad());;

qmlRegisterType<MyModel>("model",1,0,"MyModel");

context->setContextProperty("systemTray", systemTray);

context->setContextProperty("Save",saves);

context->setContextProperty("qmlTranslator", &qmlTranslator);

engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

return app.exec();
}
15 changes: 15 additions & 0 deletions cpp/qmltranslator.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#include "qmltranslator.h"
#include <tray.h>
#include <QApplication>

QmlTranslator::QmlTranslator(QObject *parent) : QObject(parent)
{

}

void QmlTranslator::setTranslation(QString translation)
{
m_translator.load(":/QmlLanguage_" + translation, "."); // Загружаем перевод
qApp->installTranslator(&m_translator); // Устанавливаем его в приложение
emit languageChanged(); // Сигнализируем об изменении текущего перевода
}
29 changes: 29 additions & 0 deletions cpp/qmltranslator.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#ifndef QMLTRANSLATOR_H
#define QMLTRANSLATOR_H

#include <QQuickItem>
#include <QObject>
#include <QTranslator>
#include <QSettings>


class QmlTranslator : public QObject
{
Q_OBJECT

public:
explicit QmlTranslator(QObject *parent = 0);

signals:
// Сигнал об изменении текущего языка для изменения перевода интерфейса
void languageChanged();

public:
// Метод установки перевода, который будет доступен в QML
Q_INVOKABLE void setTranslation(QString translation);

private:
QTranslator m_translator;
};

#endif // QMLTRANSLATOR_H
19 changes: 19 additions & 0 deletions cpp/save.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#include "save.h"

Save::Save(QObject *parent) : QObject(parent)
{

}

void Save::languageSave(QString languge)
{
saveLanguage =new QSettings("settings.conf",QSettings::IniFormat);
saveLanguage->setValue("Language/translations",languge);
saveLanguage->sync();
}

QString Save::langugeLoad()
{
loadLanguage = new QSettings("settings.conf",QSettings::IniFormat);
return loadLanguage->value("Language/translations","en_US").toString();
}
24 changes: 24 additions & 0 deletions cpp/save.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#ifndef SAVE_H
#define SAVE_H


#include <QQuickItem>
#include <QSettings>

class Save : public QObject
{
Q_OBJECT
public:
explicit Save(QObject *parent = 0);

public slots:
void languageSave(QString languge);
QString langugeLoad();

private:
QSettings * saveLanguage;
QSettings * loadLanguage;

};

#endif // SAVE_H
69 changes: 69 additions & 0 deletions cpp/tray.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
#include "tray.h"
#include <QMenu>
#include <QSystemTrayIcon>
#include <QTranslator>
#include <qmltranslator.h>


Tray::Tray(QObject *parent) : QObject(parent)
{

// Создаём контекстное меню с двумя пунктами
trayIconMenu = new QMenu();

/* Инициализируем иконку трея, устанавливаем иконку,
* а также задаем всплывающую подсказку
* */
trayIcon = new QSystemTrayIcon();
setTranslation();
trayIcon->setIcon(QIcon(":/play-button.png"));
trayIcon->show();
trayIcon->setToolTip("MediaPlayer");

/* Также подключаем сигнал нажатия на иконку к обработчику
* данного нажатия
* */
connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
this, SLOT(iconActivated(QSystemTrayIcon::ActivationReason)));
}

/* Метод, который обрабатывает нажатие на иконку приложения в трее
* */
void Tray::iconActivated(QSystemTrayIcon::ActivationReason reason)
{
switch (reason){
case QSystemTrayIcon::Trigger:
// В случае сигнала нажатия на иконку трея вызываем сигнал в QML слой
emit signalIconActivated();
break;
default:
break;
}
}

void Tray::hideIconTray()
{
trayIcon->hide();
}
void Tray::messege(QString title,QString messege){
trayIcon->showMessage(title,messege,QSystemTrayIcon::Information,500);
}
void Tray::setTranslation(){
trayIconMenu->clear();

QAction * viewWindow = new QAction(trUtf8("Open"), this);
QAction * quitAction = new QAction(trUtf8("Exit"), this);
QAction * nextSong = new QAction(trUtf8("Next"),this);
QAction * previousSong = new QAction(trUtf8("Priviouse"),this);

connect(viewWindow, &QAction::triggered, this, &Tray::signalShow);
connect(quitAction, &QAction::triggered, this, &Tray::signalQuit);
connect(nextSong, &QAction::triggered,this, &Tray::signalNext);
connect(previousSong, &QAction::triggered,this, &Tray::signalPrevious);

trayIconMenu->addAction(viewWindow);
trayIconMenu->addAction(nextSong);
trayIconMenu->addAction(previousSong);
trayIconMenu->addAction(quitAction);
trayIcon->setContextMenu(trayIconMenu);
}
41 changes: 41 additions & 0 deletions cpp/tray.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
#ifndef TRAY_H
#define TRAY_H

#include <QQuickItem>
#include <QObject>
#include <QAction>
#include <QSystemTrayIcon>
#include <QApplication>

class Tray : public QObject
{
Q_OBJECT
public:
explicit Tray(QObject *parent = 0);

// Сигналы от системного трея
signals:
void signalIconActivated();
void signalShow();
void signalQuit();
void signalNext();
void signalPrevious();

private slots:
/* Слот, который будет принимать сигнал от события
* нажатия на иконку приложения в трее
*/
void iconActivated(QSystemTrayIcon::ActivationReason reason);

public slots:
void hideIconTray();
void messege(QString title,QString messege);
void setTranslation();

private:
/* Объявляем объект будущей иконки приложения для трея */
QSystemTrayIcon * trayIcon;
QMenu * trayIconMenu;
};

#endif // TRAY_H
Binary file added else/QmlLanguage_ru.qm
Binary file not shown.
Loading