Membuat Aplikasi (Vala + GTK 3) [bahagian ke-3]

Di bahagian ini kita akan melihat bagaimana membuat tetingkap lain dan merancangnya dengan GTK. Kami juga akan melihat beberapa fungsi seperti menambahkan soalan dan menggunakan tiga butang (50%, beku dan lulus).

ToolBar dan ToolButton

Buat Bar Alat:

app2

Membuat Butang Alat, dalam hal ini kita akan meletakkan ikon (anda boleh menemui banyak ikon secara lalai di sini) dengan «from_stock (Gtk.Stock.IconName):

Tangkap dari 2013-12-07 23:26:52

Kita dapat melihat bahawa dalam aplikasi kita mempunyai bar dengan dua butang di bahagian atas, di mana kita akan menggunakan yang pertama untuk membuat soalan baru dan yang kedua untuk mengimport soalan (melalui fail):

Tangkap dari 2013-11-08 00:30:32

Membuat soalan:
Butang yang kami buat sebelumnya (di bar alat) ketika kami mengkliknya, kami akan membuka tetingkap gtk baru yang akan membolehkan kami menambahkan soalan ke pangkalan data kami:

app1

Untuk membuat tetingkap baru kita akan membuat kelas baru, yang akan kita panggil Soalan, dan bagaimana kelas Aplikasi kita akan membuat tetingkap baru (this.window = new Gtk.Window ();)

Kami akan menggunakan beberapa komponen untuk membuat antara muka grafik mengikut urutan;

-Label (Soalan)

- Kemasukan (di mana kami akan menulis soalan)

-Label (tindak balas)

- 4 kotak mendatar yang akan mengandungi Entry (jawapannya) dan Switch (untuk memilih apakah itu betul)

-Tombol (untuk dilengkapkan)

Kita dapat melihat rupanya:

Tangkap dari 2013-12-08 01:07:08

Untuk menyimpan soalan, kita harus mendapatkan teks entri, itu diperoleh dengan get_text () yang mengembalikan rentetan.

app5

Untuk mengetahui jika Suis aktif kita boleh menggunakan kaedahnya dapatkan_aktif () yang kembali benar jika dihidupkan dan flase jika tidak aktif.

 50%, butang Freeze dan Pass:

 -50%:

Untuk 50% kita hanya perlu melihat mana butang yang betul dan mengeluarkan 2 yang tidak betul, dalam hal ini kita membatalkannya dengan set_sensitive (false).

app4

Keputusan:

app6

-Beku:

Kami menetapkan bar ke 0 sekali lagi.

ini.time_bar.set_fraction (0);

-Lulus:

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

 Bahagian Seterusnya (4):

Pada ansuran seterusnya, kita akan melihat bagaimana meningkatkan aspek aplikasi kita, seperti soalan yang tidak selalu muncul dalam posisi yang sama, meletakkan ikon pada aplikasi ...


Tinggalkan komen anda

Alamat email anda tidak akan disiarkan. Ruangan yang diperlukan ditanda dengan *

*

*

  1. Bertanggungjawab atas data: Miguel Ángel Gatón
  2. Tujuan data: Mengendalikan SPAM, pengurusan komen.
  3. Perundangan: Persetujuan anda
  4. Komunikasi data: Data tidak akan disampaikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Pangkalan data yang dihoskan oleh Occentus Networks (EU)
  6. Hak: Pada bila-bila masa anda boleh menghadkan, memulihkan dan menghapus maklumat anda.

  1.   f3niX kata

    Saya suka jawapannya ... haha ​​.. Salam

  2.   panchomora kata

    Bagus sekali artikel ini mengenai vala .. Saya harap yang lain .. salam

  3.   cr0t0 kata

    Saya telah menunggu kemasukan anda di Vala, saya harap akan ada banyak penghantaran. Ceria!

  4.   pptru kata

    Artikel yang bagus, terima kasih kerana berkongsi.

  5.   Hiram kata

    Hello,

    Saya telah mengikuti entri anda sebelumnya untuk membuat aplikasi ini, masalahnya timbul sekarang kerana saya cuba mengakses entri tetingkap baru, saya melakukannya dengan cara ini, dalam kaedah saveC dari kelas createQuestions (kelas yang membuat tetingkap) .

    awam kosongkanC () {
    string str = questionE.get_text ();
    stdout.printf ("Perjanjian% s \ n", str);
    }

    Tetapi pada output saya mendapat ini:
    (bu: 6196): Gtk-KRITIKAL **: gtk_entry_get_text: penegasan `GTK_IS_ENTRY (kemasukan) 'gagal

    Perjanjian (batal)

    Saya telah melihat beberapa contoh dan dalam definisi kaedah yang memasuki entri mereka melakukan sesuatu seperti ini:

    batal on_activate (kemasukan Gtk.Entry) {
    nama = entri.get_text ();
    cetak ("\ nHalo" + nama + "! \ n \ n");
    }

    Tetapi mereka hanya mempunyai satu entri dan dalam contoh ini ada 5, jadi di sini saya sudah tersesat, anda boleh membimbing saya dengan lebih baik.

    1.    Lolbimbo kata

      Apabila anda membuat entri, anda tidak memberi mereka nama yang sama, untuk mendapatkan teks yang mereka ada:

      r1 = entri1.get_text ();
      r2 = entri2.get_text ();
      r3 = entri3.get_text ();
      r4 = entri4.get_text ();

      Sekiranya anda mahu, letakkan pastebin dan saya akan melihatnya

      1.    Hiram kata

        lolbimbo jika sebenarnya saya memilikinya dengan nama yang berbeza, tetapi saya hanya menggunakan satu untuk ujian kerana tidak ada yang mengembalikan teks yang saya masukkan ke dalam entri, ini akan menghantar saya ralat yang disebutkan di atas:

        Tetapi pada output saya mendapat ini:
        (bu: 6196): Gtk-KRITIKAL **: gtk_entry_get_text: penegasan `GTK_IS_ENTRY (kemasukan) 'gagal

        Perjanjian (batal)

        Saya masih menyiasat ...

        Bersorak. !!

      2.    Hiram kata

        Sedia di sini adalah sumber, salam.
        http://pastebin.com/pZG8GbrY

    2.    Lolbimbo kata

      Hai Hiram, lihat, saya akan memberitahu anda bagaimana anda harus melakukannya-untuk menyelesaikannya, perkara pertama ini berlaku kerana kami membuat tetingkap baru (bukan yang utama), dan ketika memanggil entri, ( maaf untuk kata-kata) Saya tidak tahu mengapa kotoran itu tidak kembali seolah-olah entri tetapi Widget, tetapi hei, untuk menyelesaikannya anda hanya perlu menukar semua komponen statik yang anda buat menjadi dinamik menggunakan var:

      var questionE = Gtk.Entry baru ();

      maka fungsi akan berfungsi dan anda akan menerima teks di dalam entri.

      save.clicked.connect (() => {
      // string str = this.questionE.get_text ();
      stdout.printf ("Perjanjian% s \ n", askE.get_text ());
      });

      Akhirnya, jangan lupa untuk menukar baris di mana anda menambahkan entri untuk menunjukkannya:

      askE.show ();

      Saya memberikan anda kod lengkap dengan pengubahsuaian sehingga anda dapat memastikannya sudah berfungsi, iaitu jika anda mesti mengubah semua elemen (sekurang-kurangnya entri) untuk meneruskan aplikasi.

      http://paste.desdelinux.net/5048

      salam

      1.    Hiram kata

        Chale, di sini mengganggu lagi, saya terus menghadapi masalah, kod yang anda tunjukkan kepada saya baik-baik saja, hanya ada sesuatu yang berlaku sekiranya:

        save.clicked.connect (() => {
        // string str = this.questionE.get_text ();
        stdout.printf ("Perjanjian% s \ n", askE.get_text ());
        });

        Ia berada di dalam kelas Soalan dan berfungsi dengan baik tetapi ketika mahu masuk dari saveC, ia tidak menyusunnya menyebabkan saya melakukan kesalahan ini:

        bu01.vala: 50.38-50.50: ralat: Hujah 1: Tidak dapat menukar dari `Questions.saveC 'ke` Gtk.Button.clicked'
        ini.guardar.clicked.connect (this.guardarC);
        ^^^^^^^^^^^^^^
        bu01.vala: 251.58-251.66: amaran: Gtk.Stock sudah tidak digunakan lagi sejak 3.10
        bu01.vala: 260.59-260.67: amaran: Gtk.Stock sudah tidak digunakan lagi sejak 3.10
        Gagal menyusun: 1 ralat, 2 amaran

        Saya ingin menganggapnya adalah kerana cara saya melewati parameter ketika peristiwa klik berlaku:
        ini.guardar.clicked.connect (this.guardarC);

        Terima kasih terlebih dahulu atas maklum balas; di sini saya tinggalkan kod yang menyebabkan kesalahan: http://pastebin.com/pLzExhrb

      2.    Lolbimbo kata

        Saya belum mencubanya tetapi saya berpendapat bahawa mengeluarkan argumen dari fungsi akan membuangnya.

        public void saveC (Gtk.Entry askE) {
        string str = questionE.get_text ();
        stdout.printf ("Perjanjian% s \ n", str);
        }

        a:
        awam kosongkanC () {
        string str = questionE.get_text ();
        stdout.printf ("Perjanjian% s \ n", str);
        }

      3.    Hiram kata

        lolbimbo, saya telah mencuba mengeluarkan hujah dan masih tidak berjaya,

        Saya masih cuba memahami masalahnya, saya masih baru dengan Vala dan saya tidak dapat menemui banyak dokumentasi, saya harap dapat segera mencari penyelesaiannya atau menunggu anda melepaskan bahagian keempat xD.

        Saya terus mencuba ...

        Greetings.