Selles osas näeme, kuidas luua veel üks aken ja kujundada see GTK-ga. Näeme ka mõningaid funktsioone, nagu küsimuste lisamine ja kolme nupu kasutamine (50%, külmutamine ja edastamine).
Tööriistariba ja tööriistanupp
Looge tööriistariba:
Tööriistanupu loomisel paneme sel juhul ikooni (vaikimisi leiate palju ikoone siin) tähisega «from_stock (Gtk.Stock.IconName):
Näeme, et meie rakenduse ülaosas on kahe nupuga riba, kus esimest kasutame uute küsimuste loomiseks ja teist küsimuste importimiseks (faili kaudu):
Küsimuste loomine:
Varem (tööriistaribal) loodud nupp sellele klõpsates avame uue gtk akna, mis võimaldab meil oma andmebaasi lisada küsimusi:
Uue akna loomiseks loome uue klassi, mida nimetame küsimusteks ja kuidas meie rakenduse klass loob uue akna (this.window = new Gtk.Window ();)
Graafilise liidese järjekorras loomiseks kasutame mõnda komponenti;
-Silt (küsimused)
- sissekanne (kuhu me küsimuse kirjutame)
-Silt (vastused)
- 4 horisontaalset kasti, mis sisaldavad kirjet (vastus) ja lülitit (et valida, kas see on õige)
-Nupp (lõpetamiseks)
Näeme, kuidas see välja näeb:
Küsimuse salvestamiseks peame hankima sissekannete teksti, need saadakse stringiga get_text (), mis tagastab stringi.
Et teada saada, kas lüliti on aktiivne, saame selle meetodit kasutada get_active (), mis tagastab väärtuse true, kui see on sisse lülitatud, ja flase, kui see on välja lülitatud.
50%, nupud Freeze ja Pass:
-viiskümmend%:
50% puhul peame vaatama ainult selle, mis on õige nupp, ja eemaldama 2 valet, sel juhul tühistame need väärtusega set_sensitive (false).
Tulemus:
- külmutamine:
Panime riba uuesti 0-ni.
this.timebar.set_fraction (0);
-Üle andma:
button3.clicked.connect (() => {
this.bd_select_preguntas ();
this.next_pregunta();
});
Järgmine osa (4):
Järgmises osas näeme, kuidas parandada meie rakenduse aspekte, näiteks seda, et küsimused ei ilmu alati samas asendis, pange rakendusele ikoon ...
Mulle meeldivad vastused ... haha .. Tervitused
Väga head need artiklid vala kohta .. loodan, et teisedki .. tervitused
Ma ootan teie sissekannet Vala kohta, loodan, et neid on palju. Tervitades!
Tore artikkel, aitäh jagamast.
Tere,
Olen selle rakenduse loomisel jälginud teie eelmisi kirjeid, probleem ilmneb nüüd, kui proovin pääseda juurde uue akna sissekannetele, teen seda niimoodi klassi createQuestions (akna loova klassi) meetodis saveC .
public void saveC () {
string str = questionE.get_text ();
stdout.printf ("Leping% s \ n", str);
}
Kuid väljundina saan selle:
(bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: väide "GTK_IS_ENTRY (sisestus)" nurjus
Leping (null)
Olen näinud mõningaid näiteid ja sissepääsudele juurdepääsu meetodite määratlemisel teevad nad midagi sellist:
void on_activate (Gtk.Kande kirje) {
nimi = sisestus.get_text ();
print ("\ nTere" + nimi + "! \ n \ n");
}
Kuid neil on ainult üks sissekanne ja selles näites on neid 5, nii et siin ma juba eksisin, võiksite mind paremini suunata.
Noh, kui loote sissekandeid, ei anna te neile sama nime, et saada teksti, mille olete teinud:
r1 = sisestus1.get_text ();
r2 = sisestus2.get_text ();
r3 = sisestus3.get_text ();
r4 = sisestus4.get_text ();
Kui soovite, pange paber ja ma vaatan seda
lolbimbo, kui mul tegelikult on neid erinevate nimedega, kuid testide jaoks kasutan ainult ühte, kuna ükski neist ei tagasta kirjesse sisestatud teksti, siis see saadab mulle ülalnimetatud vea:
Kuid väljundina saan selle:
(bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: väide "GTK_IS_ENTRY (sisestus)" nurjus
Leping (null)
Uurin veel ...
Terviseks. !!
Siin on valmis allikas, tervitused.
http://pastebin.com/pZG8GbrY
Tere, Hiram, vaata, ma ütlen sulle, kuidas sa pead selle lahendamiseks tegema, esimene asi juhtub seetõttu, et loome uue akna (see pole peamine) ja kirjele helistades (vabandust sõnad) Ma ei tea, miks see pask ei naase nii, nagu oleks see kirje, vaid vidin, aga hei, selle lahendamiseks peate lihtsalt muutma kõik staatilised komponendid, mille lõite, kasutades var
var questionE = uus Gtk.Entry ();
siis funktsioon töötab ja saate teksti kirje sees.
save.clicked.connect (() => {
// string str = see.küsimusE.get_text ();
stdout.printf ("Leping% s \ n", askE.get_text ());
});
Lõpuks ärge unustage selle kuvamiseks rida, kuhu kirje lisate:
askE.show ();
Jätan teile kogu koodi koos muudatustega, et saaksite kontrollida, kas see juba töötab, st kui peate rakenduse jätkamiseks muutma kõiki elemente (vähemalt kirjeid).
http://paste.desdelinux.net/5048
seoses
Chale, siin jälle tülitades, mul on pidevalt probleeme, minu näidatud kood on korras, ainult juhul juhtub midagi:
save.clicked.connect (() => {
// string str = see.küsimusE.get_text ();
stdout.printf ("Leping% s \ n", askE.get_text ());
});
See on klassi Küsimused sees ja töötab hästi, kuid kui soovite siseneda rakendusest saveC, siis see ei kompileeru, vaid viskab mulle selle vea:
bu01.vala: 50.38-50.50: tõrge: Argument 1: Ei saa teisendada failist "Questions.saveC" versiooniks "Gtk.Button.clicked"
this.guardar.clicked.connect (this.guardarC);
^^^^^^^^^^^^^^
bu01.vala: 251.58-251.66: hoiatus: GTK.aktsia on alates 3.10-st aegunud
bu01.vala: 260.59-260.67: hoiatus: GTK.aktsia on alates 3.10-st aegunud
Koostamine ebaõnnestus: 1 viga, 2 hoiatus
Ma tahan arvata, et see tuleneb sellest, kuidas ma parameetri edastan kliki sündmuse toimumisel:
this.guardar.clicked.connect (this.guardarC);
Täname juba tagasiside eest; siin jätan vea viskava koodi: http://pastebin.com/pLzExhrb
Ma pole seda proovinud, kuid arvan, et argumendi eemaldamine funktsioonist viskab selle minema.
public void saveC (Gtk.Kanne küsibE) {
string str = questionE.get_text ();
stdout.printf ("Leping% s \ n", str);
}
a:
public void saveC () {
string str = questionE.get_text ();
stdout.printf ("Leping% s \ n", str);
}
lolbimbo, olen proovinud vaidlust eemaldada ja see ei toimi ikka,
Püüan endiselt probleemist aru saada, olen Vala jaoks uus ja ma ei leia palju dokumente, loodan, et leian peagi lahenduse või ootan teie neljanda osa xD väljaandmist.
Proovin edasi ...
Tervitused.