QuickSilverとかGnomeDoとか、ああいう感じのソフトが作りたいのでその第一歩。
Windowsアプリケーション開発は少しだけ経験がありますが、Qtは最近はじめたばかりです。
では早速。
新規プロジェクト > Qtウィジェットプロジェクト > QtGUIアプリケーション を選択
名前を適当につける。あたしはSystemTraySampleと名づけました。
デスクトップ
Qtバージョン毎にDebugとReleaseを1つずつ
シャドウビルドを使用
クラス名を適当につける。あたしはSystemTraySampleと名づけました。
基底クラスをQWidgetに。
フォームを生成するにチェックをつける。
完了ボタンをクリック。
Qxtを使うために、前回書いたように以下を.proに追加
CONFIG += qxt QXT_DIR = C:\Qxt INCLUDEPATH += C:\Qxt\include\QxtGui INCLUDEPATH += C:\Qxt\include\QxtCore LIBS += -LC:\Qxt\lib QXT += gui core
あとは、QtのSystem Tray Icon Exampleを参考に
// systemtraysample.h #ifndef SYSTEMTRAYSAMPLE_H #define SYSTEMTRAYSAMPLE_H #include <QWidget> class QSystemTrayIcon; class QMenu; namespace Ui { class SystemTraySample; } class SystemTraySample : public QWidget { Q_OBJECT public: explicit SystemTraySample(QWidget *parent = 0); ~SystemTraySample(); protected: void closeEvent(QCloseEvent *); private: Ui::SystemTraySample *ui; void createTrayIcon(); void createActions(); QSystemTrayIcon* trayIcon; QMenu* trayIconMenu; QAction *minimizeAction; QAction *maximizeAction; QAction *restoreAction; QAction *quitAction; }; #endif // SYSTEMTRAYSAMPLE_H
//SystemTraySample.cpp #include "systemtraysample.h" #include "ui_systemtraysample.h" #include <QxtGlobalShortcut> #include <QMenu> #include <QSystemTrayIcon> #include <QCloseEvent> SystemTraySample::SystemTraySample(QWidget *parent) : QWidget(parent), ui(new Ui::SystemTraySample) { ui->setupUi(this); createActions(); createTrayIcon(); QxtGlobalShortcut *shortcut = new QxtGlobalShortcut(this); shortcut->setShortcut(QKeySequence("Ctrl+Shift+F12")); connect(shortcut, SIGNAL(activated()), this, SLOT(showNormal())); } SystemTraySample::~SystemTraySample() { delete ui; } void SystemTraySample::createTrayIcon() { trayIconMenu = new QMenu(this); trayIconMenu->addAction(minimizeAction); trayIconMenu->addAction(maximizeAction); trayIconMenu->addAction(restoreAction); trayIconMenu->addSeparator(); trayIconMenu->addAction(quitAction); trayIcon = new QSystemTrayIcon(this); trayIcon->setContextMenu(trayIconMenu); trayIcon->setIcon(QIcon(":/trash.svg")); trayIcon->show(); } void SystemTraySample::createActions() { minimizeAction = new QAction(tr("Mi&nimize"), this); connect(minimizeAction, SIGNAL(triggered()), this, SLOT(hide())); maximizeAction = new QAction(tr("Ma&ximize"), this); connect(maximizeAction, SIGNAL(triggered()), this, SLOT(showMaximized())); restoreAction = new QAction(tr("&Restore"), this); connect(restoreAction, SIGNAL(triggered()), this, SLOT(showNormal())); quitAction = new QAction(tr("&Quit"), this); connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit())); } void SystemTraySample::closeEvent(QCloseEvent *event) { if (trayIcon->isVisible()) { hide(); event->ignore(); } }
コンストラクタ内の
QxtGlobalShortcut *shortcut = new QxtGlobalShortcut(this); shortcut->setShortcut(QKeySequence("Ctrl+Shift+F12")); connect(shortcut, SIGNAL(activated()), this, SLOT(showNormal()));
でウィンドウがアクティブじゃなくても利用可能なショートカットキー(グローバルショートカット?)を作成して、それが押されたら何をするか(showNormal())を設定します。
ついでにいまさらながらgithubも初めて使ってみました。
https://github.com/TakahashiShuuhei/SystemTraySample