Linuxでシステムトレイにアイコン表示(qt/C++)

前回までに、Linuxでシステムトレイにgtkを使ってC++/pythonでアイコン表示してみたのですが、

今回はqtを使ってC++でアイコン表示してみようと思います。

実装

内容的にはgtkのときとほぼ同じことをするコードです。

#include <QtWidgets/QApplication>
#include <QtGui/QIcon>
#include <QtWidgets/QSystemTrayIcon>
#include <QtWidgets/QMenu>

int main(int argc, char **argv)
{
    QApplication app(argc, argv);
    QMenu* menu = new QMenu();
    QAction* exitAction = new QAction("Exit", menu);
    menu->addAction(exitAction);
    QIcon oIcon = QIcon::fromTheme("virtualbox");
    QSystemTrayIcon *trayIcon = new QSystemTrayIcon(oIcon);
    QObject::connect(trayIcon, &QSystemTrayIcon::activated,
        [&](QSystemTrayIcon::ActivationReason reason) {menu->exec();});
    QObject::connect(exitAction, &QAction::triggered,
        [&](bool checked) {app.quit();});
    trayIcon->setContextMenu(menu);
    trayIcon->setVisible(true);

    return app.exec();
}
cmake_minimum_required(VERSION 2.8.11)

project(example)

find_package(Qt5 5.7.0 REQUIRED COMPONENTS
    Core
    Widgets
)

set(CMAKE_AUTOMOC ON)

add_executable(${PROJECT_NAME}
    main.cpp
)

target_link_libraries(${PROJECT_NAME}
    Qt5::Core
    Qt5::Widgets
)

結果

見た目は同じなので省略します。

メモリ

Lubuntu-LXQtでは…

$ ps -eo uid,pid,rss,vsz,args | grep example
 1000  196686 34576 271408 ./example
...
$

Neon-KDEでは…

$ ps -eo uid,pid,rss,vsz,args | grep example
 1000    1439 41684 281352 ./example
...
$ 

35~42MBという結果でした。

まとめ

C++の場合gtkからqtにすると、消費メモリがLubuntuでは13MBほど増え、Neonでは2MBほど減るようです。

次回はこれをpythonで書いてみます。

未分類C++,linux,qt

Posted by first_user