まず、いくつかの一般的な言葉をお伝えしたいと思います。
- sdk03では、「暴力的な若者の間違い」をすべて考慮に入れようとしました。
- 古いskd02とは完全に互換性がありません
- ほとんどの場合、バージョン間でAPIにこのような突然の移行はありません
だから、Kutimaのプラグインを作成したことがない人は、sdk03
Qt 4.6を使用して開発が行われているという重要な事実に注目したいと思います。これは巨大な追加の機会を提供します。
面白いことを実現したいという欲求に燃えているが、どこにエネルギーを向けるべきかわからない場合は、この記事が役立ちます!
夏に、プラグインシステムの現在の実装がプログラムを停止させたという結論に達しました。
機能を増やすことが非常に難しくなりました。プログラムは長い間軽量でなくなり、弱いマシンでは長いコンタクトシートをロードすると速度が低下しました。 バグの修正には長い時間がかかりました。
そのため、libqutimの開発が始まりました。そこでは、古いプラグインシステムのすべての誤りを考慮に入れ、Kutimの開発を可能な限りシンプルで楽しいものにすることを試みました。
新しいqutIMの構造:
- マイクロカーネル-モジュールマネージャーの実装が含まれています。 qutIMのすべての部分のロードと正しい操作を担当します。 ロードするモジュールとロードしないモジュールを選択する機能があります。 さらに、依存関係を追跡する機能もあります。これは、作業中に他のコンポーネントに依存するモジュールに不可欠な場合があります。 さらに、アクティブなモジュールはランタイムで直接切り替えることができます。たとえば、configbackendでアクティブに使用されます。
- libqutim-このライブラリは、すべてのモジュールのインターフェースと、最も有用で頻繁に使用される関数のセットを格納します
- コアレイヤー-アプリケーションで直接コンパイルされるモジュールのセット。必要に応じて、以下で説明するように、簡単に変更できます。
- プラグイン-プロトコルに最適な、実行可能ファイルの隣のプラグインフォルダーに入れるのが現在最も簡単な従来の共有ライブラリ
最初のステップは、Qt4.6ライブラリをインストールすることです。WindowsおよびMacos Xの場合は、 公式サイトにあります。
Ubuntaユーザーはkubuntu-experimentalリポジトリを使用できます。次のコマンドで追加できます。
$ add-apt-repository ppa:kubuntu-experimental
gentushnikが対応するebuildのマスクを解除するだけで十分です。 残りについては、必要なパッケージを見つけたり、自分で組み立てたりすることは難しくありません。
ここからソースコードを取得します。
www.qutim.org/svn/qutim/branches/sdk03
通常どおり、ターミナルでコマンドを実行します
$ mkdir build && cd build && cmake ..
その結果、アセンブリのすべての依存関係が満たされていないことが判明した場合、cmakeはMakefileを作成し、不足しているパッケージを再インストールします。
次のような行に注意してください
+ layer KINETICPOPUPS added to build
+ layer XSETTINGSDIALOG added to build
+ layer ADIUMCHAT added to build
現在までに、cmakeスクリプトは使用されているレイヤーの自動検出を実装しています。 プラグインのソースコードをscr / corelayers / layer_nameに配置するだけで、システムによって認識されます。 これにより、独自のアセンブリを作成する大きな可能性が広がり、開発が簡素化されます。
この記事では、設定ダイアログを実装する方法を説明します。
src / corelayersディレクトリにサブディレクトリsimplesettingsdialogを作成します。
以下に示すように、settingslayerimplクラスを作成し、libqutimのSettingsLayerクラスから継承します。
settingslayeriml.h
#include "libqutim/settingslayer.h"
class SettingsDialog;
using namespace qutim_sdk_0_3;
class SettingsLayerImpl : public SettingsLayer
{
Q_OBJECT
public :
SettingsLayerImpl();
virtual ~SettingsLayerImpl();
virtual void close();
virtual void show ( const SettingsItemList& settings );
private :
QPointer<SettingsDialog> m_dialog;
};
* This source code was highlighted with Source Code Highlighter .
settingslayeriml.cpp
重要:モジュールを直接バイナリファイルにコンパイルする場合は、例に示すようにヘッダーファイルを含める必要があります。 プラグインに
<libqutim/>
する場合は、
<libqutim/>
を
<qutim/>
に置き換える必要があります
レイヤーの操作は非常に簡単です。showリクエストで、表示される設定のリストが送信されます
settingslayeriml.cpp
#include "settingslayerimpl.h"
#include "settingsdialog.h"
#include "modulemanagerimpl.h"
#include <libqutim/icon.h>
static Core::CoreModuleHelper<SettingsLayerImpl> settings_layer_static( // ,
QT_TRANSLATE_NOOP( "Plugin" , "Simple Settings dialog" ), //, QT_TRANSLATE_NOOP
QT_TRANSLATE_NOOP( "Plugin" , "SDK03 example" )
);
void SettingsLayerImpl::show ( const SettingsItemList& settings )
{
if (m_dialog.isNull())
m_dialog = new SettingsDialog(settings); // ,
m_dialog->show();
}
* This source code was highlighted with Source Code Highlighter .
設定ダイアログの実装には注意が必要なことはありません。メモリコストを最小限に抑えるために、SettingsItemは要求時にのみ設定ウィジェットを生成することに注意してください。
次に、ダイアログ自体を作成します。
settingsdialog.cpp
#include "settingsdialog.h"
#include "ui_settingsdialog.h"
#include <libqutim/settingswidget.h>
SettingsDialog::SettingsDialog ( const qutim_sdk_0_3::SettingsItemList& settings)
: ui ( new Ui::SettingsDialog)
{
m_setting_list = settings;
ui->setupUi( this );
foreach (SettingsItem *settings_item, m_setting_list) //
{
QListWidgetItem *list_item = new QListWidgetItem (settings_item->icon(),
settings_item->text(),
ui->listWidget
);
}
connect(ui->listWidget,SIGNAL(currentRowChanged( int )),SLOT(currentRowChanged( int ))); //
ui->listWidget->setCurrentRow(0);
}
void SettingsDialog::currentRowChanged ( int index)
{
SettingsWidget *widget = m_setting_list.at(index)->widget(); // ,
if (widget == 0)
return ;
if (ui->stackedWidget->indexOf(widget) == -1) // ,
{
widget->load();
ui->stackedWidget->addWidget(widget);
}
ui->stackedWidget->setCurrentWidget(widget); //
}
SettingsDialog::~SettingsDialog()
{
delete ui;
}
* This source code was highlighted with Source Code Highlighter .
ファイルを追加した後、コマンドを再度実行することを忘れないでください。
$ cmake ..
出力に次の行が表示されたら、すべてを正しく行いました。
+ layer SIMPLESETTINGSDIALOG added to build
ここで、Settings:showWidget()関数の呼び出しをどこかに追加する必要があります。通常は、いずれかのレイヤーのコンストラクターに呼び出しを追加します。
すべてが組み立てられたら、アプリケーションを実行できます。 最後に、このきれいなウィンドウが表示されます。
![](http://sauron.me/images/qutim/settingswindow.png)
プラグインの作成が非常に簡単になったと確信していただければ幸いです。 ご覧のとおり、設定はまだ厚くないので、先に進み、空白を埋めると、最高のプラグインがカーネルに落ちます!
これが新しいKutimaの開発に関する最後の記事ではないことを願っています。将来、設定エンジンの動作、json形式がそれらを保存するのにどれだけ便利かなどについて話す予定です。
ソースコードはこちらからダウンロードできます。