アプリの作成(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.   パンチョモラ

    ヴァラについてのこれらの記事はとても良いです..私は他の人を願っています..挨拶

  3.   cr0t0

    ヴァラについてのあなたのエントリーを保留しています、私は多くの配達があることを望みます。 乾杯!

  4.   pptru

    素敵な記事、共有してくれてありがとう。

  5.   ハイラム

    こんにちは、

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

    public void saveC(){
    string str = questionE.get_text();
    stdout.printf( "Treaty%s \ n"、str);
    }

    しかし、出力で私はこれを取得します:
    (bu:6196):Gtk-CRITICAL **:gtk_entry_get_text:アサーション `GTK_IS_ENTRY(entry) 'が失敗しました

    条約(null)

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

    void on_activate(Gtk.Entry entry){
    name = entry.get_text();
    print( "\ nHello" + name + "!\ n \ n");
    }

    しかし、エントリは5つしかなく、この例ではXNUMXつあるので、ここで私はすでに迷子になっています。

    1.    ロンビンボ

      さて、あなたがエントリを作成するとき、あなたはそれらに同じ名前を付けないで、彼らがあなたに持っているテキストを得るために:

      r1 = entry1.get_text();
      r2 = entry2.get_text();
      r3 = entry3.get_text();
      r4 = entry4.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を使用して作成したすべての静的コンポーネントを動的に変更する必要があります。

      var questionE = new Gtk.Entry();

      その後、関数が機能し、エントリ内にテキストが表示されます。

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

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

      askE.show();

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

      http://paste.desdelinux.net/5048

      よろしく

      1.    ハイラム

        チャレ、ここでまた悩んでいます、私は問題を抱え続けています、あなたが私に見せたコードは大丈夫です、イベントで何かが起こるだけです:

        save.clicked.connect(()=> {
        //文字列str = this.questionE.get_text();
        stdout.printf( "Treaty%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 asksE){
        string str = questionE.get_text();
        stdout.printf( "Treaty%s \ n"、str);
        }

        a:
        public void saveC(){
        string str = questionE.get_text();
        stdout.printf( "Treaty%s \ n"、str);
        }

      3.    ハイラム

        lolbimbo、引数を削除しようとしましたが、それでも機能しません。

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

        私は試み続けます...

        ご挨拶。