アプリの作成(Vala + GTK 3)[第3部]

このパートでは、別のウィンドウを作成し、GTKを使用してデザインする方法を説明します。 また、質問の追加や50つのボタン(XNUMX%、フリーズ、パス)の使用などの機能もいくつか表示されます。

ToolBarとToolButton

ToolBarを作成します。

app2

ToolButtonを作成します。この場合、アイコンを配置します(デフォルトでは多くのアイコンを見つけることができます) ここで)with«from_stock(Gtk.Stock.IconName):

2013-12-07:23:26からキャプチャ

このアプリケーションでは、上部にXNUMXつのボタンがあるバーがあり、最初のボタンを使用して新しい質問を作成し、XNUMX番目のボタンを使用して(ファイルを介して)質問をインポートしていることがわかります。

2013-11-08:00:30からキャプチャ

質問の作成:
以前に(ツールバーで)作成したボタンをクリックすると、データベースに質問を追加できる新しいgtkウィンドウが開きます。

app1

新しいウィンドウを作成するには、Questionsと呼ばれる新しいクラスを作成し、Appクラスが新しいウィンドウを作成する方法を作成します(this.window = new Gtk.Window();)

いくつかのコンポーネントを使用して、グラフィカルインターフェイスを順番に作成します。

-ラベル(質問)

-エントリー(質問を書く場所)

-ラベル(応答)

-エントリ(回答)とスイッチ(正しいものかどうかを選択するため)を含む4つの水平ボックス

-ボタン(完了する)

私たちはそれがどのように見えるかを見ることができます:

2013-12-08:01:07からキャプチャ

質問を保存するには、エントリのテキストを取得する必要があります。エントリは、文字列を返すget_text()で取得されます。

app5

スイッチがアクティブかどうかを知るには、その方法を使用できます get_active ()オンの場合はtrueを返し、オフの場合はflasを返します。

 50%、フリーズボタンとパスボタン:

 -50%:

50%の場合、正しいボタンを確認し、正しくない2つを削除するだけです。この場合、set_sensitive(false)でキャンセルします。

app4

結果:

app6

-氷結:

バーを再び0に設定します。

this.time_bar.set_fraction(0);

-パス:

button3.clicked.connect (() => {
this.bd_select_preguntas ();
this.next_pregunta();
});

 次のパート(4):

次回の記事では、質問が常に同じ位置に表示されるとは限らない、アプリにアイコンを配置するなど、アプリケーションの側面を改善する方法を説明します...


12コメント、あなたのコメントを残してください

コメントを残す

あなたのメールアドレスが公開されることはありません。 必須フィールドには付いています *

*

*

  1. データの責任者:MiguelÁngelGatón
  2. データの目的:SPAMの制御、コメント管理。
  3. 正当化:あなたの同意
  4. データの伝達:法的義務がある場合を除き、データが第三者に伝達されることはありません。
  5. データストレージ:Occentus Networks(EU)がホストするデータベース
  6. 権利:いつでも情報を制限、回復、削除できます。

  1.   f3niX

    答えはとても気に入っています…笑

  2.   パンチョモラ

    Vala に関するこれらの記事は非常に優れています。他の記事も楽しみにしています。よろしくお願いします。

  3.   cr0t0

    Vala へのエントリーを保留しています。たくさんの配信があることを願っています。 こんにちは!

  4.   プトル

    良い記事です、共有してくれてありがとう。

  5.   ハイラム

    こんにちは、

    このアプリを作成するために以前のエントリに従いました。新しいウィンドウのエントリにアクセスしようとすると問題が発生します。createQuestions クラス (ウィンドウを作成するクラス) の saveC メソッドでこの方法でアクセスします。 。

    public void saveC() {
    文字列 str = askE.get_text();
    stdout.printf("%s を扱う\n", str);
    }

    しかし、出力では次のようになります。
    (bu:6196): Gtk-CRITICAL **: gtk_entry_get_text: アサーション `GTK_IS_ENTRY (entry)' が失敗しました

    処理済み (null)

    いくつかの例を見てきましたが、エントリにアクセスするメソッドの定義では次のようなことが行われます。

    void on_activate(Gtk.Entry エントリー) {
    名前 = エントリ.get_text();
    print("\nHello" + 名前 + "!\n\n");
    }

    しかし、エントリは 5 つしかなく、この例では XNUMX つあります。そのため、ここですでに迷ってしまったのですが、もっとわかりやすく教えていただけませんか。

    1.    ロンビンボ

      エントリを作成するときは、エントリに同じ名前を付けません。エントリのテキストを取得するには、次のようにします。

      r1 = エントリ1.get_text();
      r2 = エントリ2.get_text();
      r3 = エントリ3.get_text();
      r4 = エントリ4.get_text();

      もしよかったら、ペーストビンを置いてください、それでは見てみましょう

      1.    ハイラム

        lolbimbo はい、実際には異なる名前を付けていますが、エントリに入力したテキストを返すものはなく、前述のエラーが送信されるため、テスト用に XNUMX つだけを使用しています。

        しかし、出力では次のようになります。
        (bu:6196): Gtk-CRITICAL **: gtk_entry_get_text: アサーション `GTK_IS_ENTRY (entry)' が失敗しました

        処理済み (null)

        調査を続けています...

        乾杯。!!

      2.    ハイラム

        ここにソースが用意されています、こんにちは。
        http://pastebin.com/pZG8GbrY

    2.    ロンビンボ

      こんにちは、ハイラム、ほら、それを解決するためにどのようにしなければならないかを教えます。これが最初に起こるのは、新しいウィンドウ (メインウィンドウではありません) を作成し、エントリを呼び出すときに、(ごめんなさい)言葉として)なぜそれがエントリではなくウィジェットであるかのように返されないのかわかりませんが、それを修正するには、作成したすべての静的コンポーネントを動的コンポーネントに変更するだけです。変数:

      var askE = new Gtk.Entry();

      その後、関数が機能し、エントリ内のテキストを受け取ります。

      save.clicked.connect(() => {
      //文字列 str = this.questionE.get_text();
      stdout.printf("%s を扱う\n", askE.get_text());
      });

      最後に、エントリを追加した行を変更して表示することを忘れないでください。

      askE.show();

      すでに動作していること、つまりアプリケーションを続行するにはすべての要素 (少なくともエントリ) を変更する必要があるかどうかを確認できるように、変更を加えた完全なコードを残しておきます。

      http://paste.desdelinux.net/5048

      よろしく

      1.    ハイラム

        Chale、このあたりでまた悩まされています。問題が続いています。あなたが示したコードは正常に動作します。イベントで何かが起こるだけです。

        save.clicked.connect(() => {
        //文字列 str = this.questionE.get_text();
        stdout.printf("%s を扱う\n", askE.get_text());
        });

        これはQuestionsクラス内にあり、正常に動作しますが、saveCから入力しようとするとコンパイルされず、次のエラーが発生します。

        bu01.vala:50.38-50.50: エラー: 引数 1: `Questions.saveC' から `Gtk.Button.clicked' に変換できません
        this.guardar.clicked.connect(this.guardarC);
        ^^^^^^^^^^^^^^
        bu01.vala:251.58-251.66:警告:Gtk.Stockは3.10以降非推奨になっています
        bu01.vala:260.59-260.67:警告:Gtk.Stockは3.10以降非推奨になっています
        コンパイルに失敗しました:1つのエラー、2つの警告

        クリックイベントが発生したときにパラメータを渡す方法が原因だと思います。
        this.guardar.clicked.connect(this.guardarC);

        フィードバックをよろしくお願いします。 ここに、エラーをスローするコードを残します。 http://pastebin.com/pLzExhrb

      2.    ロンビンボ

        試したことはありませんが、関数から引数を削除するとそれが破棄されると思います。

        public void saveC (Gtk.Entry askE) {
        文字列 str = askE.get_text();
        stdout.printf("%s を扱う\n", str);
        }

        a:
        public void saveC() {
        文字列 str = askE.get_text();
        stdout.printf("%s を扱う\n", str);
        }

      3.    ハイラム

        lolbimbo、引数を削除しようとしましたが、まだ機能しません。

        私はまだ問題を理解しようとしています。Vala は初めてで、ドキュメントがあまり見つかりません。解決策がすぐに見つかることを願っています。または、第 XNUMX 部 xD がリリースされるまでお待ちください。

        努力し続けます...

        ご挨拶。