KOM を使う / OpenParts の使い方
前のページ | 第 3章OpenParts | 次のページ

# 3.8. OpenParts のピクスマップ と 配列 - OPUIUtils

ツールバーとメニューは、たいていQPixmapクラスを使ってピクスマップにより、装飾されます。 GUI要素にアクセスするCORBAインタフェースを用いると、QPixmapは、OpenParts のアプリケーション用OpenPartsUI::Pixmapになります。 OpenPartsUI::Pixmapは、ちょうど"stringified"(文字列化された)QPixmapで、opUIUtils.(h,cc)には使いやすい変換ルーチンが含まれています。

更に、OPUIUtilsには、CORBA::WChar*とQString間のストリング変換ルーチンを含んでいます。 これはQt バージョン>=2.0がQString経由で、Unicodeをサポートしているため必要となります。 全ての場所、メニュー及びツールバーのような明らかなGUI要素はこのサポートで変換されています。 OpenParts もインタフェースで"wstring" (CORBA::WChar *)を用い、変換ルーチンを使用し、提供したりすることによって変換されています。 これらのルーチンは、OPUIUtilクラスのスタティックメンバ関数で、まさにピクスマップ変換のようです。 用途を単純化するために、次の2つのマクロが定義されています:`Q2C`と`C2Q`。 最初のマクロはQStringをCORBA::WChar *文字列に変換し、2つ目のマクロはその逆です。

QStringからCORBA::WChar *への変換では、変換ルーチンがメモリを割り当てます。 メモリリークを回避するには、CORBA::WString_var変数の使用を強くお勧めします。 正確には同じことが QPixmap ->OpenPartsUI::Pixmap変換にも適用されます:OpenPartsUI::Pixmap_varを使えばリークの心配はありません:-)。

これは、サンプルコードで、どのように行うかを表しています:

       1     ...
       2     OpenPartsUI::Pixmap_var pm = OPUIUtils::convertPixmap( QPixmap_variable_here );
       3     someToolBar->insertButton( pm, ... );
       4     ...
       5     // 同 pm 変数を再度使用
       6     pm = OPUIUtils::convertPixmap( another_qpixmap );
       7     ...

QStringの方を用いて行われなければならないことに類似:

       1     ...
       2     CORBA::WString_var text = Q2C( QString_here );
       3     someMenuBar->insertItem7( text, ... );
       4     ...
       5     // または次のようにもできます:
       6     someMenuBar->insertItem7( ( text = Q2C( QString_here ) ) , ...);
       7     ...

最後に残った注意点: `Q2C`を使うことで関数の結果として"広義文字列"(CORBA::WChar *)を返す場合、絶対に`CORBA::wstring_dup()` を使わないでください。

例:

       1   return CORBA::string_dup( Q2C( QString_here ) ); //!!!! 警告!!!!!
       2   ...
       3   return Q2C( QString_here ); // 正! Q2C は既配列を割り当てています。

前のページ | Home | 次のページ
CORBA 経由の共有GUIアクセス - OpenPartsUI と そのインタフェース | Up | OpenParts フォーカス処理からのウィジェットの排除