Ebben a részben meglátjuk, hogyan hozhatunk létre egy másik ablakot és tervezhetjük azt a GTK-val. Látni fogunk néhány olyan funkciót is, mint a kérdések hozzáadása és a három gomb használata (50%, fagyasztás és átadás).
Eszköztár és Eszköztár
Hozzon létre egy eszköztárat:
ToolButton létrehozása, ebben az esetben egy ikont teszünk (alapértelmezés szerint sok ikont talál itt) a «from_stock (Gtk.Stock.IconName) kifejezéssel:
Láthatjuk, hogy alkalmazásunkban van egy sáv, amelynek tetején két gomb található, ahol az elsőt új kérdések létrehozásához, a másodikat pedig kérdések importálásához használjuk (fájlon keresztül):
Kérdések készítése:
A korábban (az eszköztáron) létrehozott gombra kattintva megnyílik egy új gtk ablak, amely lehetővé teszi számunkra, hogy kérdéseket tegyünk fel az adatbázisunkba:
Új ablak létrehozásához létrehozunk egy új osztályt, amelyet Kérdéseknek hívunk, és hogy az App osztályunk hogyan hoz létre új ablakot (this.window = new Gtk.Window ();)
Néhány összetevőt használunk a grafikus felület sorrendben történő létrehozásához;
-Címke (kérdések)
- Nevezés (ahol megírjuk a kérdést)
-Címke (válaszok)
- 4 vízszintes mező, amely egy bejegyzést (a választ) és egy kapcsolót tartalmaz (hogy kiválaszthassa, hogy helyes-e)
-Gomb (a befejezéshez)
Láthatjuk, hogyan néz ki:
A kérdés elmentéséhez meg kell szereznünk a bejegyzések szövegét, ezeket a get_text () paranccsal kapjuk meg, amely egy karakterláncot ad vissza.
Tudni tudjuk, hogy ha egy kapcsoló aktív, használhatjuk-e a módszerét get_active (), amely igaz, ha be van kapcsolva, és villog, ha ki van kapcsolva.
50%, Freeze és Pass gombok:
-ötven%:
50% -nál csak azt kell megvizsgálnunk, hogy melyik a helyes gomb, és eltávolítunk 2-et, ami nem megfelelő, ebben az esetben a set_sensitive (false) paranccsal töröljük őket.
eredmény:
-Fagy:
Ismét 0-ra állítottuk a mércét.
this.time_bar.set_fraction (0);
-Pass:
button3.clicked.connect (() => {
this.bd_select_preguntas ();
this.next_pregunta();
});
Következő rész (4):
A következő részletben megtudhatjuk, hogyan lehetne javítani alkalmazásunk egyes aspektusait, például azt, hogy a kérdések nem mindig ugyanazon a helyen jelennek meg, helyezzen el egy ikont az alkalmazásban ...
Szeretem a válaszokat ... haha .. Üdvözlet
Nagyon jó ezek a cikkek a valáról .. remélem a többiek .. üdvözlet
Várakozásomra vár a Vala-ra vonatkozó bejegyzésed, remélem, sok lesz a szállítás. Egészségére!
Kedves cikk, köszönöm a megosztást.
Helló,
Követtem a korábbi bejegyzéseket ennek az alkalmazásnak a létrehozásához, a probléma most jelentkezik, amikor megpróbálom elérni az új ablak bejáratait, ezt így csinálom, a createQuestions osztály (az ablakot létrehozó osztály) saveC metódusában.
public void saveC () {
string str = questionE.get_text ();
stdout.printf ("Szerződés% s \ n", str);
}
De a kimeneten ezt kapom:
(bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: "GTK_IS_ENTRY (bejegyzés)" állítás sikertelen
Szerződés (null)
Láttam néhány példát, és a belépőket elérő módszerek meghatározásában valami ilyesmit tesznek:
void on_activate (Gtk. Bejegyzés bejegyzése) {
név = bejegyzés.get_text ();
print ("\ nHelló" + név + "! \ n \ n");
}
De csak egy bejegyzésük van, és ebben a példában 5 van, tehát itt már eltévedtem, jobban tudnál vezetni.
Nos, amikor létrehozza a bejegyzéseket, nem adja meg nekik ugyanazt a nevet, hogy megszerezhesse a náluk lévő szöveget:
r1 = bejegyzés1.get_text ();
r2 = bejegyzés2.get_text ();
r3 = bejegyzés3.get_text ();
r4 = bejegyzés4.get_text ();
Ha akarsz, tegyél egy papint, és megnézem
lolbimbo, ha valójában különböző nevekkel rendelkezem velük, de csak egyet használok a tesztekhez, mivel egyik sem adja vissza a bejegyzésbe tett szöveget, az a fent említett hibát küldi nekem:
De a kimeneten ezt kapom:
(bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: "GTK_IS_ENTRY (bejegyzés)" állítás sikertelen
Szerződés (null)
Még vizsgálom ...
Egészségére.!!
Kész itt a forrás, üdvözlet.
http://pastebin.com/pZG8GbrY
Helló, Hiram, nézze, elmondom, hogyan kell tennie a megoldáshoz, az első dolog azért történik, mert új ablakot hozunk létre (nem ez a fő), és amikor a bejegyzést felhívom (elnézést a szavakért), nem tudom miért Ez a szar nem úgy tér vissza, mintha egy bejegyzés lenne, hanem egy Widget, de hé, a megoldáshoz egyszerűen meg kell változtatnia az összes statikus komponenst, amelyet dinamikusan létrehozott a var segítségével:
var questionE = új Gtk.Entry ();
akkor a funkció működni fog, és megkapja a szöveget a bejegyzésen belül.
save.clicked.connect (() => {
// string str = this.questionE.get_text ();
stdout.printf ("Szerződés% s \ n", askE.get_text ());
});
Végül ne felejtse el megváltoztatni azt a sort, ahová a bejegyzést hozzáadja:
askE.show ();
A teljes kódot meghagyom a módosítással, hogy ellenőrizhesse, hogy már működik-e, vagyis ha az alkalmazás folytatásához meg kell változtatnia az összes elemet (legalább a bejegyzéseket).
http://paste.desdelinux.net/5048
Üdvözlet
Chale, itt megint zavar, továbbra is problémáim vannak, a kód, amit megmutatsz, rendben van, csak valami történik az esetben:
save.clicked.connect (() => {
// string str = this.questionE.get_text ();
stdout.printf ("Szerződés% s \ n", askE.get_text ());
});
A Questions osztályon belül van, és jól működik, de amikor a saveC-ből akar belépni, nem fordít, hanem ezt a hibát dobja el:
bu01.vala: 50.38-50.50: hiba: 1. argumentum: Nem lehet átalakítani a "Questions.saveC" -ről "Gtk.Button.clicked" -re
this.guardar.clicked.connect (this.guardarC);
^^^^^^^^^^^^^^
bu01.vala: 251.58-251.66: figyelmeztetés: A Gtk.Stock 3.10 óta elavult
bu01.vala: 260.59-260.67: figyelmeztetés: A Gtk.Stock 3.10 óta elavult
A fordítás sikertelen: 1 hiba, 2 figyelmeztetés
Azt akarom gondolni, hogy a kattintási esemény bekövetkezésekor adom át a paramétert:
this.guardar.clicked.connect (this.guardarC);
Előre is köszönöm a visszajelzéseket; itt hagyom a hibát dobó kódot: http://pastebin.com/pLzExhrb
Még nem próbáltam ki, de úgy gondolom, hogy az argumentum eltávolítása a függvényből el fogja dobni.
public void saveC (Gtk. A bejegyzés kériE) {
string str = questionE.get_text ();
stdout.printf ("Szerződés% s \ n", str);
}
a:
public void saveC () {
string str = questionE.get_text ();
stdout.printf ("Szerződés% s \ n", str);
}
lolbimbo, megpróbáltam eltávolítani az érvet, és még mindig nem működik,
Még mindig próbálom megérteni a problémát, új vagyok a Vala számára, és nem találok sok dokumentációt, remélem, hogy hamarosan megtalálom a megoldást, vagy megvárom, amíg kiadja az xD negyedik részét.
Próbálom tovább ...
Üdvözlet.