QtCreator用のプラグインの開発に関する注意事項の続きで、この記事では、モード切り替えパネルにウィジェットを直接配置する方法について説明します。 1920x1080の画面解像度では、373x70ピクセル以上の空き領域が残っており、プラグインで便利に使用できます。 実装の例として、QtCreatorの2つの新しいプラグインが提供されています。 プラグインの説明、ソースコードリポジトリリンク、およびWindowsおよびLinux用にコンパイルされたQtCreator 3.xxのバイナリが含まれています。
説明Api
まず、プラグインを作成する必要があります( [ファイル ]- > [新しいファイルまたはプロジェクト ]ダイアログで、プロジェクトタイプ[ ライブラリ]-> [Qt Creatorプラグイン ]を選択します)。 プロジェクト作成ダイアログで、QtCreatorソース(gitリポジトリから取得した)へのパスと、QtCreatorがコンパイルされたディレクトリを指定する必要があります。 プラグインフレームワークが作成されていると仮定し、ウィジェットを配置するためのApiの説明に進みます。 この場合、Apiはプラグイン開発者が使用できるメソッドとして理解されます( パブリックに配置され、名前空間(名前空間) Internalには含まれません)。
ウィジェットは、プラグインの初期化中( 初期化関数内)およびそれが依存するすべてのプラグインの初期化後( extensionsInitialized関数内)に追加できます。
モードバーを使用するには、ウィジェットの追加(QWidget)、アクションの追加(QAction)、モードの追加(IMode派生)の3つの方法があります。 いずれの場合も、モードマネージャーのヘッダーファイルを接続する必要があります。
#include <coreplugin/modemanager.h>
1.ウィジェットの追加(QWidget)
ウィジェットの追加は、静的関数Core :: ModeManager :: addWidget(QWidget * widget)を使用して行われます 。
パネルに単純なラベル(QLabel)を追加するコードを検討してください。 これを行うには、プラグインの初期化関数の実装で、次のコードを追加します。
// - QWidget *container = new QWidget(); // QLabel *info = new QLabel(QString::fromUtf8("hello habrahabr!")); // , info->setStyleSheet(QString::fromUtf8("QLabel {color: white; }")); // QHBoxLayout *containerLayout = new QHBoxLayout(); // containerLayout->addWidget(info); // - container->setLayout(containerLayout); // - Core::ModeManager::addWidget(container);
この例を実行すると、碑文全体を含むパネルの幅がどのように「伸びる」かがわかります。
サイズを制御するには、QHBoxLayoutがインデント、ウィジェット間の距離を個別に決定し、コンテナウィジェットの最大サイズを修正すると、コンテナ内にあるウィジェットが指定されたサイズに「トリミング」され、それらをファイナライズできます。
containerLayout->setContentsMargins(0,0,0,0); containerLayout->setSpacing(0); container->setMaximumWidth(70);
上記のコードでは、インデントはゼロであり、ウィジェットは使用可能な最大サイズ(70)を占有できます。 左右のインデントを変更する場合、ウィジェットの最大幅も左右のインデントの量だけ減らす必要があります。
すべての空き領域の高さは利用可能です。 ただし、ウィジェットがモードボタンによって占有されているスペースを要求し始めると、(図に示すように、アイコンを非表示にしている間に)圧縮されることに注意してください。
これは、比較的低解像度のコンピューターでプラグインを使用する場合(たとえば、記事の最後に2つのプラグインを「トリミング」せずに1366x768の解像度で)使用する場合は覚えておく価値があります。 コンテナウィジェットの高さのより大きな最小値を設定することにより、この状況をシミュレートできます。次に例を示します。
container->setMinimumHeight(600);
2.アクションの追加(QAction)
アクションを追加するには、次の関数を使用します。
Core::ModeManager::addAction(QAction *action, int priority)
ここで、アクションは必要なアクション(開発者が作成)であり、優先度はアクションが投稿される順序を決定します。 値が低いほど、アクションをアクティブ化するためのボタンが低くなります(実行、デバッグの開始、プロジェクトのビルド)
次の例では、(たとえば)インストーラービルドスクリプト(たとえば、NSIS)を実行するアクション(QAction)を作成します。
QAction *buildInstallerAction = new QAction(this); buildInstallerAction->setIcon(QIcon(QString::fromUtf8(":/icons/icons/nsis48x48.png"))); buildInstallerAction->setText(QString::fromUtf8("Build installer")); Core::ModeManager::addAction(buildInstallerAction, 0);
「ビルドインストーラー」というテキストがツールチップに表示されます。 優先度は「0」なので、図に示すように、アクション呼び出しGUIは一番下にあります。
QIconの画像は、32x32 pxのサイズで使用する必要があります。大きな画像はこのサイズに圧縮されるためです。
注:多くのアクションを追加する必要がある場合は、QToolBarをQtCreatorに追加することを検討してください。
QMainWindow *mainWindow = qobject_cast<QMainWindow *> (Core::ICore::mainWindow()); QToolBar *toolbar = new QToolBar(); toolbar->addAction(action); mainWindow->addToolBar(Qt::TopToolBarArea, toolbar);
関数を使用して、プロジェクト選択エリアにアクションを追加することもできます
しかし、この分野の特定の目的(現在のプロジェクトとアセンブリの種類の選択)のために、プラグインでの使用は期待できないようです。Core::ModeManager::addProjectSelector(QAction *action);
3.新しいモードの作成
現在、QtCreatorには7つのモードがあります( 「ようこそ」から「ヘルプ」まで )。 独自のモードを作成する場合、このために、Core :: IModeを継承する対応するクラスを作成し、それを拡張システムに追加する必要があります。
ExtensionSystem::IPlugin::addObject(myMode);
出力パネル(OutputPanel)に情報を表示する能力が十分でない場合は、新しいモード(IMode)を作成する必要があります。 たとえば、QtCreatorに統合されたUMLエディターを作成する場合。 このトピックは非常に膨大であるため、この記事では取り上げず、プラグインに直接進みます。
Habrahabrユーザー統計表示プラグイン
記事を書いてハブに投稿したと仮定します コミュニティがどのように認識しているかに興味があると仮定するのは合理的です。 ここには多くのオプションはありません:それらを肯定的に評価し、その結果、評価が増加するか、否定的に評価するか、評価が低下します。 ユーザー間の記事がカルマにマイナスを入れたいという欲求を引き起こす場合、3番目のオプションがあります。 この場合、記事を出版物から削除することは(手遅れになるまで)価値があるかもしれません。 もちろん、サーバー上のcronにスクリプトを記述して、これらのインジケーターを監視し、マイナスの場合はSMSメッセージをユーザーに送信できますが、これはすでに多すぎると思います。 ただし、統計を表示するためだけにIDEからブラウザに切り替えるたびに、開発者は時間だけでなく注意も費やします。 そのような状況では、「アクションのシーケンスを5回以上繰り返す場合、このシーケンスを自動化する必要があります」というフレーズを思い出します。 それで、実際には小さな自動化のアイデアが浮かび上がり、プログラミングを中断することなく状況を監視できるようになりました。
特定の頻度(1〜60分の範囲で設定されている)で特定のユーザー向けに開発されたプラグインは、サイトのapi(http://habrahabr.ru/api/profile/username/)にアクセスし、xmlデータを受信して解析し、カルマと評価の値を更新します。 設定は、「環境」セクションの「Habrahabr」タブにあります。
プラグインのテスト中に、apiから取得した値が関連するサイトのデータよりも遅れることがあることに注意してください。
参照:
オーディオプレーヤーコントロールプラグイン
このプラグインは、開発環境を離れることなくオーディオの再生を制御するように設計されています。 マルチメディアキーを押すエミュレーションを使用します (つまり、動作するオーディオプレーヤーを制御します)。 プラグインをQtCreatorにインストールすると、3つのボタンのあるパネルが表示されます。前のトラックに移動し、一時停止とオーディオの再生を切り替え、次のトラックに移動します。
プラグインは、Aimp、iTunes、Audaciousオーディオプレーヤーでテストされました。
参照:
両方のプラグインをインストールするには、プラグインが配置されているディレクトリにアーカイブの内容を展開する必要があります。
Windowsの場合、通常はC:\ Qt \ Tools \ QtCreator \ lib \ qtcreator \ plugins。
Lunuxベースのシステムの場合/home/username/Qt5.2.0/Tools/QtCreator/lib/qtcreator/plugins Qtをユーザーディレクトリにインストールするとき。 または(オプションとして)/opt/Qt5.2.0/Tools/QtCreator/lib/qtcreator/plugins(Ubuntuにインストール)。
おわりに
おそらく、読者は面白いプラグインのアイデアを持っているでしょう(コメントや著者への個人的なメッセージでそれについて書いてください)。 説明したAPIを使用して、たとえば、サーバー上のアセンブリステータスを表示するプラグインを作成できます。
、またはIDEの起動以降のプログラミングに費やされた時間を表示し、N分ごとに信号を送るプラグイン:「N分間休憩なしで作業している」(短い休憩は健康と生産性の両方に役立ちます)。 最後のプラグインは、プロジェクトの作業に関する統計を収集するためのシステムに開発できます。これにより、開発全般と各ファイル(およびAPIで許可されているためクラス/関数)に費やされる時間を分析できます。 しかし、これは別の記事のトピックです。