Pada bagian ini kita akan melihat bagaimana membuat jendela lain dan mendesainnya dengan GTK. Kami juga akan melihat beberapa fungsi seperti menambahkan pertanyaan dan menggunakan tiga tombol (50%, diam dan lulus).
ToolBar dan ToolButton
Buat ToolBar:
Membuat ToolButton, dalam hal ini kita akan meletakkan ikon (Anda dapat menemukan banyak ikon secara default di sini) dengan «from_stock (Gtk.Stock.IconName):
Kita dapat melihat bahwa dalam aplikasi kita, kita memiliki bilah dengan dua tombol di bagian atas, di mana kita akan menggunakan yang pertama untuk membuat pertanyaan baru dan yang kedua untuk mengimpor pertanyaan (melalui file):
Membuat pertanyaan:
Tombol yang kita buat sebelumnya (di toolbar) ketika kita mengkliknya, kita akan membuka jendela gtk baru yang akan memungkinkan kita untuk menambahkan pertanyaan ke database kita:
Untuk membuat jendela baru kita akan membuat kelas baru, yang akan kita sebut Pertanyaan, dan bagaimana kelas App kita akan membuat jendela baru (this.window = new Gtk.Window ();)
Kami akan menggunakan beberapa komponen untuk membuat antarmuka grafis secara berurutan;
-Label (Pertanyaan)
- Masuk (di mana kita akan menulis pertanyaan)
-Label (tanggapan)
- 4 kotak horizontal yang akan berisi Entri (jawaban) dan Sakelar (untuk memilih apakah itu benar)
-Tombol (untuk menyelesaikan)
Kita bisa lihat tampilannya:
Untuk menyimpan pertanyaan kita harus mendapatkan teks dari entri, mereka diperoleh dengan get_text () yang mengembalikan sebuah string.
Untuk mengetahui apakah sebuah Switch aktif kita dapat menggunakan metodenya dapatkan_aktif () yang mengembalikan nilai true jika aktif dan flase jika nonaktif.
50%, tombol Freeze dan Pass:
-lima puluh%:
Untuk 50% kita hanya perlu melihat tombol mana yang benar dan menghapus 2 tombol yang salah, dalam hal ini kita membatalkannya dengan set_sensitive (false).
Hasil:
-Membekukan:
Kami mengatur bar ke 0 lagi.
this.timebar.set_fraction (0);
-Lulus:
button3.clicked.connect (() => {
this.bd_select_preguntas ();
this.next_pregunta();
});
Bagian Selanjutnya (4):
Pada angsuran berikutnya kita akan melihat bagaimana meningkatkan aspek aplikasi kita, seperti pertanyaan tidak selalu muncul di posisi yang sama, letakkan ikon di aplikasi ...
Saya suka jawabannya ... haha .. Salam
Bagus sekali artikel tentang vala ini .. semoga yang lainnya .. salam kenal
Saya telah menunggu entri Anda di Vala, saya harap akan ada banyak pengiriman. Bersulang!
Artikel bagus, terima kasih sudah berbagi.
Halo,
Saya telah mengikuti entri Anda sebelumnya untuk pembuatan aplikasi ini, masalahnya muncul sekarang ketika saya mencoba mengakses entri jendela baru, saya melakukannya dengan cara ini, dalam metode saveC kelas createQuestions (kelas yang menciptakan jendela).
public void saveC () {
string str = questionE.get_text ();
stdout.printf ("Perjanjian% s \ n", str);
}
Tetapi pada keluaran saya mendapatkan ini:
(bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: pernyataan `GTK_IS_ENTRY (entri) 'gagal
Perjanjian (nol)
Saya telah melihat beberapa contoh dan dalam definisi metode yang mengakses entri mereka melakukan sesuatu seperti ini:
void on_activate (entri Gtk.Entry) {
nama = entri.get_text();
cetak ("\ nHalo" + nama + "! \ n \ n");
}
Tetapi mereka hanya memiliki satu entri dan dalam contoh ini ada 5, jadi di sini saya sudah tersesat, Anda bisa membimbing saya dengan lebih baik.
Nah, ketika Anda membuat entri, Anda tidak memberi mereka nama yang sama, untuk mendapatkan teks yang mereka miliki Anda lakukan:
r1 = entri1.get_text();
r2 = entri2.get_text();
r3 = entri3.get_text();
r4 = entri4.get_text();
Jika Anda mau, taruh pastebin dan saya akan melihatnya
lolbimbo jika sebenarnya saya memilikinya dengan nama yang berbeda, tetapi saya hanya menggunakan satu untuk tes karena tidak ada yang mengembalikan teks yang saya masukkan ke dalam entri, itu mengirimi saya kesalahan yang disebutkan di atas:
Tetapi pada keluaran saya mendapatkan ini:
(bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: pernyataan `GTK_IS_ENTRY (entri) 'gagal
Perjanjian (nol)
Saya masih menyelidiki ...
Bersulang.!!
Siap disini sumbernya, salam kenal.
http://pastebin.com/pZG8GbrY
Hai Hiram, lihat, saya akan memberi tahu Anda bagaimana Anda harus melakukannya-untuk menyelesaikannya, hal pertama ini terjadi karena kita membuat jendela baru (ini bukan yang utama), dan ketika memanggil entri, ( maaf untuk kata-katanya) Saya tidak tahu mengapa omong kosong itu tidak kembali seolah-olah itu adalah entri tetapi Widget, tapi hei, untuk mengatasinya Anda hanya perlu mengubah semua komponen statis yang Anda buat menjadi dinamis menggunakan var:
var questionE = new Gtk.Entry ();
maka fungsinya akan bekerja 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 ());
});
Terakhir, jangan lupa untuk mengubah baris tempat Anda menambahkan entri untuk menampilkannya:
askE.show ();
Saya meninggalkan Anda kode lengkap dengan modifikasi sehingga Anda dapat memeriksa bahwa itu sudah berfungsi, yaitu jika Anda harus mengubah semua elemen (setidaknya entri) untuk melanjutkan aplikasi.
http://paste.desdelinux.net/5048
salam
Chale, di sini repot lagi, saya terus mengalami masalah, kode yang Anda tunjukkan baik-baik saja, hanya terjadi sesuatu dalam acara:
save.clicked.connect (() => {
// string str = this.questionE.get_text ();
stdout.printf ("Perjanjian% s \ n", askE.get_text ());
});
Itu ada di dalam kelas Pertanyaan dan berfungsi dengan baik tetapi ketika ingin masuk dari saveC, itu tidak dikompilasi, itu memberi saya kesalahan ini:
bu01.vala: 50.38-50.50: error: Argument 1: Tidak dapat mengonversi dari `Questions.saveC 'ke` Gtk.Button.clicked'
this.guardar.clicked.connect (this.guardarC);
^^^^^^^^^^^^^^
bu01.vala: 251.58-251.66: peringatan: Gtk.Stock tidak digunakan lagi sejak 3.10
bu01.vala: 260.59-260.67: peringatan: Gtk.Stock tidak digunakan lagi sejak 3.10
Kompilasi gagal: 1 kesalahan, 2 peringatan
Saya ingin berpikir bahwa ini karena cara saya meneruskan parameter saat peristiwa klik terjadi:
this.guardar.clicked.connect (this.guardarC);
Terima kasih sebelumnya atas umpan baliknya; di sini saya meninggalkan kode yang melempar kesalahan: http://pastebin.com/pLzExhrb
Saya belum mencobanya tetapi saya pikir menghapus argumen dari fungsi akan membuangnya.
public void saveC (Gtk.Entry askE) {
string str = questionE.get_text ();
stdout.printf ("Perjanjian% s \ n", str);
}
a:
public void saveC () {
string str = questionE.get_text ();
stdout.printf ("Perjanjian% s \ n", str);
}
lolbimbo, saya sudah mencoba menghapus argumen tersebut dan masih tidak berhasil,
Saya masih mencoba memahami masalahnya, saya baru mengenal Vala dan saya tidak dapat menemukan banyak dokumentasi, saya berharap dapat menemukan solusinya segera atau menunggu Anda untuk merilis bagian keempat xD.
Saya tetap mencoba ...
Salam.