まえがき
C ++でのQtアプリケーションの作成に関するHabrに関する記事がありましたが、Javaの例はありませんでした。 10分の空き時間を費やして、最も単純なアプリケーションを作成することにしました。 興味がありました:
- ビジュアルパーツの作成
- スロットと信号を使用する
カットの下で、私がしたことの簡単な説明。
エッセンス
最初に 、jambi qt.nokia.com/downloadsをダウンロードして展開し、開発環境でJavaプロジェクトを作成し、Mainクラスを作成します。 すぐにご持参ください:
パッケージ jambi.demo;
import com.trolltech.qt.gui.QApplication;
import com.trolltech.qt.gui.QGridLayout;
import com.trolltech.qt.gui.QLayout;
import com.trolltech.qt.gui.QPushButton;
import com.trolltech.qt.gui.QTextEdit;
import com.trolltech.qt.gui.QWidget;
パブリック クラスメイン
{
/ *
*ウィンドウのクラス
* /
パブリック スタティック クラス MainWindow
QWidgetを拡張します
{
パブリック MainWindow()
{
setWindowTitle( "これはJAmbiの簡単なデモです" );
initControls();
}
//テキストフィールド、そこからコンソールに出力するテキストを取得する場所
private static final QTextEdit edit = new QTextEdit( "initial string" );
private void initControls()
{
//ウィジェットのコンテナを作成します
QLayoutレイアウト= 新しい QGridLayout( this );
//ただのボタン。
QPushButton button = 新しい QPushButton( "push me" );
//ここで、「クリックされた」信号には必要なことをQtに伝えます
//「this」オブジェクトで「on_button1_clicked()」を呼び出します。
//これの代わりに、他のオブジェクトがあります
button.clicked.connect( this 、 "on_button1_clicked()" );
//ウィジェットをコンテナに追加します
layout.addWidget(編集);
layout.addWidget(ボタン);
}
void on_button1_clicked()
{
System.out.println(edit.toPlainText());
/ *生成されたビルダークラスからダイアログを作成* /
// 1.「空の」ウィジェットを作成する
QWidgetダイアログ= 新しい QWidget();
// 2.ビルドインスタンスを作成する
Ui_Dialog1 dialogProto = new Ui_Dialog1();
// 3.ビジュアルパーツを初期化する
dialogProto.setupUi(ダイアログ);
// 4.残りを行います(スロットと信号をリンクします)
dialogProto.pushButton.clicked.connect( this 、 "on_pushButton_clicked()" );
dialog.show();
}
void on_pushButton_clicked()
{
System.out.println( "プッシュボタンがクリックされました" );
}
}
public static void main(String [] args)
{
//ライブラリを初期化するQtアプリケーションを作成します
//およびグラフィックスサブシステム。
QApplication app = new QApplication(args);
QWidget mainWidget = new MainWindow();
mainWidget.show();
QApplication.exec();
}
}
Qtを初期化するために、 QApplicationを作成します 。 しかし、最も興味深いのはMainWindowだけです。
私が最初に気に入ったのは、シグナルにアクションを割り当てることが簡単だったことです。 JavaリフレクションAPIとスロット/シグナルのアイデアは、非常に便利で使いやすいリンクメカニズムを形成します。
2番目の行は、デザイナーで作成されたユーザーインターフェイスです。 それから私は小さなバグに出会いました:
jambi_home / bin / juic -d ../project ../project/test.uiを実行しようとすると、私は次のようになりました:
juic:ジャンビファイルではありません
問題は、juicがuiノードでlanguage = "jambi"プロパティを探していることですが、デザイナーがそこに登録していないため、検証チェックが失敗します。
最後に、生成されたUi_Dialog1.javaを取得しました 。これには、ウィジェットコードは含まれず、ビルダーのみが含まれていました。 それを使用するには、空のウィジェットを作成し 、そのビルダークラスでインストーラーメソッドsetupUi(ウィジェット)を設定するだけです。
これはすべて、プログラムの実行中に発生します。これは、多数の要素を持つウィンドウを作成する場合、おそらくあまり良くありません。
すべてのインターフェイス要素は、ビルダークラスのパブリックメンバーとして使用できます。これにより、ウィジェットの各インスタンスにビルダークラスのインスタンスが存在することが判明したため、決定はそれほど慎重ではありません。
おわりに
Jambiはswing / awtに代わる優れた選択肢です(パフォーマンスの観点から、増加があると思います)。 個人的には、java guiを作成するシンプルさが気に入りました。 しかし、商業プロジェクトでそれを使用する前に、私は考えていただろう:
1.ライセンスのコストに見合うパフォーマンスの向上
2.プラットフォームごとにライブラリのネイティブ部分が異なるため、最終製品の配布で起こりうる問題について。
この記事は、HambiでJambiについて議論する機会です。 このライブラリで長い間働いていて、大規模なプロジェクトでそれを使用している人々のコメントを聞きたいです。