kde Plasmoid Applet開発


サマリ
plasmoidには、テキストボックスとボタンが含まれます.
 
コード#コード#
.desktopファイル
各plasmoidには1つが必要です.desktopファイルはplasmaがどのように起動するかとその名前を教えて、ファイルの内容は以下の通りです.
plasma-applet-myplasmaapplet.desktop
[Desktop Entry]Name=MyPlasmaApplet Name[zh_CN]=マイPlasmaスモールアプリケーションComment=PlasmaMyPlasmaApplet Comment[zh_CN]=PlasmaMyPlasmaApplet Type=Service X-KDE-ServiceType=Plasma/Applet X-KDE-Library=plasma_applet_myplasmaapplet X-KDE-PluginInfo-Author=fuyajun [email protected] X-KDE-PluginInfo-Name=myplasmaapplet X-KDE-PluginInfo-Version=0.1 X-KDE-PluginInfo-Website=http://plasma.kde.org/X-KDE-PluginInfo-Category= X-KDE-PluginInfo-Depends= X-KDE-PluginInfo-License=GPL X-KDE-PluginInfo-EnabledByDefault=true
その中でも、一番大切なのはX-KDE_LibraryとX-KDE-Pluginfo-nameは、クラスとplasmaの間に独自に開発された「接着剤」であり、それがなければplasamoidは起動できません.
ヘッダファイル
myplasmaapplet.h
// Here we avoid loading the header multiple times
#ifndef MYPLASMAAPPLET_HEADER
#define MYPLASMAAPPLET_HEADER

// We need the Plasma Applet headers
#include <Plasma/Applet>

class QSizeF;

namespace Plasma {
  class LineEdit;
  class PushButton;
}

// Define our plasma Applet
class MyPlasmaApplet : public Plasma::Applet
{
    Q_OBJECT
    public:
        // Basic Create/Destroy
        MyPlasmaApplet(QObject *parent, const QVariantList &args);
        ~MyPlasmaApplet();
        void init();

    private:
	Plasma::LineEdit *m_lineEdit;
	Plasma::PushButton *m_pushButton;
};
 
// This is the command that links your applet to the .desktop file
K_EXPORT_PLASMA_APPLET(myplasmaapplet, MyPlasmaApplet)
#endif

voidpaintInterface(QRectF contentsRect)


これはplasmoidを画面に描く主関数と考えられる.この関数ではplasmoidのインタフェースを定義できます.geometry()を使用しないようにcontentsRectで定義された矩形領域で描画する必要があります.plasmoidに標準的なバックグラウンドがない場合、またはsetBackgroundHints()を呼び出してバックグラウンドを無効にする場合、またはパネルにある場合、geometry()とboundingRect()の動作は一致します.しかしplasmoidが標準バックグラウンドを使用すると、小さなアプリケーション(applet)とその本来描くべき位置との間に隙間があります.
実際の作業ファイル
以下に実装関数体を示します.
myplasmaapplet.cpp
#include "myplasmaapplet.h"
#include <QPainter>
#include <QSizeF>
#include <QGraphicsLinearLayout>

#include <plasma/theme.h>
#include <plasma/widgets/lineedit.h>
#include <plasma/widgets/pushbutton.h>

MyPlasmaApplet::MyPlasmaApplet(QObject *parent, const QVariantList &args)
        : Plasma::Applet(parent, args),
        m_lineEdit(0),
        m_pushButton(0)
{
    // this will get us the standard applet background, for free!
    setBackgroundHints(DefaultBackground);
    //tell if we need a user interface for configuring the applet
    setHasConfigurationInterface(true);
    resize(200, 200);
}


MyPlasmaApplet::~MyPlasmaApplet()
{
    if (hasFailedToLaunch()) {
        // Do some cleanup here
    } else {
        // Save settings
    }
}

void MyPlasmaApplet::init()
{
    QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(this);
    layout->setOrientation(Qt::Vertical); //so widgets will be stacked up/down

    m_lineEdit = new Plasma::LineEdit(this);
    m_lineEdit->setText("Hey! This is a Plasma line edit.");

    m_pushButton = new Plasma::PushButton(this);
    m_pushButton->setText("Whoa! This is a Plasma pushbutton.");

    layout->addItem(m_lineEdit);
    layout->addItem(m_pushButton);
}

#include "myplasmaapplet.moc"

K_EXPORT_PLASMA_APPLET( <name>, <class> )


これはクラス名と.desktopファイルで定義された小さなアプリケーションの名前が関連付けられています.
注意:K_EXPORT_PLASMA_APPLET自動追加「plasma_applet_」名前に接頭辞を付けるので編集中です.desktopファイルは注意が必要です.

setBackgroundHints(DefaultBackground)


これは背景をすばやく簡単に描画する関数インタフェースで、デフォルトのPlasma背景はplasmoidの後ろに描画されます.これにより、時間とコードが節約されるだけでなく、ユーザーにより一貫したユーザー・プレゼンテーションが作成されます.

Theinit() method


コンストラクション関数では、plasmaに背景やプロファイルに関する情報だけを伝えます(あれば).コンストラクション関数で起動時の初期サイズを設定することもできます.その後plasmaは任意のウィンドウのスケールを処理し、そのサイズに注目する必要はありません.Init()メソッドでは、構成データの読み出しなど、初期化が必要なデータを初期化できます.

hasFailedToLaunch()


何らかの理由で、小さなアプリケーションが正常に起動できなかった場合(ライブラリが見つからなかったり、必要なハードウェアサポートが存在しないなど)、このメソッドはtrueを返します.この方法を使用すると、アプリケーションが終了する前にクリーンアップする機会を提供できます.

setFailedToLaunch(bool,QString)


アプリケーションが正常に起動できない場合、この関数はplasmaに通知し、可能な理由を与えることができます.plasmaは、標準化されたエラーインタフェースを描画してユーザープログラムの起動に失敗した理由を通知し、その後、アプリケーションも自分を描画するように呼び出されません.plasmoidがより複雑になり、より多くの要因に依存している場合は、これは良いクリーンアップ方法です.

dataUpdated(constQString &source, const Plasma::DataEngine::Data &data)


いずれかのplasmaのDataEngineに接続したい場合は、dataUpdatedメソッドを実装できます.DataEngineがAppletサブクラスに直接接続されている場合、DateEngineが更新されたデータを送信すると、dataUpdatedメソッドが呼び出されます.

Appletのサイズとジオメトリのプロパティを決定する:geometry()and contentsRect()


コードに小さなアプリケーションのサイズとジオメトリのプロパティを知る必要がある場合は、contentsRect()とcontentsRect()を呼び出します.size()メソッド.デフォルトのバックグラウンド設定のギャップを考慮していないため、geometry()メソッドとsize()メソッドを呼び出さないでください.同様に、Qpoint(0,0)のような絶対数を用いる、小さなアプリケーションの左上を表す位置を設定するのではなく、contentsRect()を用いるべきである.topLeft().
CMakeListsを通過する.txt構築
CMakeLists.txtファイルの内容は以下の通りです.
# Project Needs a name ofcourse
project(plasma-myplasmaapplet)
 
# Find the required Libaries
find_package(KDE4 REQUIRED)
include(KDE4Defaults)
 
add_definitions (${QT_DEFINITIONS} ${KDE4_DEFINITIONS})
include_directories(
   ${CMAKE_SOURCE_DIR}
   ${CMAKE_BINARY_DIR}
   ${KDE4_INCLUDES}
   )
 
# We add our source code here
set(myplasmaapplet_SRCS myplasmaapplet.cpp)
 
# Now make sure all files get to the right place
kde4_add_plugin(plasma_applet_myplasmaapplet ${myplasmaapplet_SRCS})
target_link_libraries(plasma_applet_myplasmaapplet 
                      ${KDE4_PLASMA_LIBS} ${KDE4_KDEUI_LIBS})
 
install(TARGETS plasma_applet_myplasmaapplet
        DESTINATION ${PLUGIN_INSTALL_DIR})
 
install(FILES plasma-applet-myplasmaapplet.desktop
        DESTINATION ${SERVICES_INSTALL_DIR})

テストapplet
現在の開発環境がテストインストールと異なる場合は、cmakeを実行し、オプション-DCMAKEを追加します.INSTALL_PREFIX=`kde4-config–prefix`.次にmakeおよびsudo makeinstallを実行するか、次のように手動でインストールします.
1.plasma_のコピーapplet_myplasmaapplet.soから$KDEDIR/lib/kde 4
2.plasma_のコピーapplet_myplasmaapplet.desktopから$KDEDIR/share/kde 4/servicesへ.
その後、kbuildsycoca 4を実行します(これにより、KDEappsは新しいdesktopファイルを知ることができます).コードをテストするにはplasmoidviewerプログラムを使用します.
kbuildsycoca4 #Needed once to let KDE know there is a new plugin
plasmoidviewer applet_name

小さなデスクトップでAppletを観察することもできます
plasmoidviewer -c desktop applet_name

ここで、applet_名前はdesktopファイルのX-KDE-PluginInfo-nameに対応するキー値.
plasmaを再起動することもでき、新しいAppletがAppletブラウザに表示されます.
kbuildsycoca4
kquitapp plasma-desktop
plasma-desktop