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:
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):
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):
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:
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:
Untuk menyimpan soalan, kita harus mendapatkan teks entri, itu diperoleh dengan get_text () yang mengembalikan rentetan.
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).
Keputusan:
-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 ...
Saya suka jawapannya ... haha .. Salam
Bagus sekali artikel ini mengenai vala .. Saya harap yang lain .. salam
Saya telah menunggu kemasukan anda di Vala, saya harap akan ada banyak penghantaran. Ceria!
Artikel yang bagus, terima kasih kerana berkongsi.
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.
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
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. !!
Sedia di sini adalah sumber, salam.
http://pastebin.com/pZG8GbrY
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
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
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);
}
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.