Σε αυτό το μέρος θα δούμε πώς να δημιουργήσουμε ένα άλλο παράθυρο και να το σχεδιάσουμε με GTK. Θα δούμε επίσης ορισμένες λειτουργίες όπως η προσθήκη ερωτήσεων και η χρήση των τριών κουμπιών (50%, πάγωμα και περάστε).
ToolBar και ToolButton
Δημιουργία γραμμής εργαλείων:
Δημιουργώντας ένα κουμπί εργαλείου, σε αυτήν την περίπτωση θα βάλουμε ένα εικονίδιο (μπορείτε να βρείτε πολλά εικονίδια από προεπιλογή Aquí) με «from_stock (Gtk.Stock.IconName):
Μπορούμε να δούμε ότι στην εφαρμογή μας έχουμε στην κορυφή μια γραμμή με δύο κουμπιά, όπου θα χρησιμοποιήσουμε το πρώτο για να δημιουργήσουμε νέες ερωτήσεις και το δεύτερο για την εισαγωγή ερωτήσεων (μέσω ενός αρχείου):
Δημιουργία ερωτήσεων:
Το κουμπί που δημιουργήσαμε προηγουμένως (στη γραμμή εργαλείων) όταν το κάνουμε κλικ, θα ανοίξουμε ένα νέο παράθυρο gtk που θα μας επιτρέψει να προσθέσουμε ερωτήσεις στη βάση δεδομένων μας:
Για να δημιουργήσουμε ένα νέο παράθυρο θα δημιουργήσουμε μια νέα τάξη, την οποία θα ονομάσουμε Ερωτήσεις και πώς θα δημιουργήσει ένα νέο παράθυρο η κλάση εφαρμογών (this.window = new Gtk.Window ();)
Θα χρησιμοποιήσουμε μερικά στοιχεία για να δημιουργήσουμε τη γραφική διεπαφή με τη σειρά.
-Ετικέτα (Ερωτήσεις)
- Είσοδος (όπου θα γράψουμε την ερώτηση)
-Ετικέτα (απαντήσεις)
- 4 οριζόντια κουτιά που θα περιέχουν μια καταχώριση (την απάντηση) και έναν διακόπτη (για να επιλέξετε εάν είναι η σωστή)
- Κουμπί (για ολοκλήρωση)
Μπορούμε να δούμε πώς φαίνεται:
Για να αποθηκεύσετε την ερώτηση θα πρέπει να λάβουμε το κείμενο των καταχωρήσεων, λαμβάνονται με get_text () που επιστρέφει μια συμβολοσειρά.
Για να μάθουμε αν ένας διακόπτης είναι ενεργός μπορούμε να χρησιμοποιήσουμε τη μέθοδο του Γίνε δραστήριος () που επιστρέφει true αν είναι ενεργοποιημένο και flase εάν είναι απενεργοποιημένο.
50%, κουμπιά Freeze και Pass:
-πενήντα%:
Για 50% πρέπει να δούμε μόνο ποιο είναι το σωστό κουμπί και να αφαιρέσουμε 2 που δεν είναι σωστά, σε αυτήν την περίπτωση τα ακυρώνουμε με το set_sensitive (false).
αποτέλεσμα:
-Πάγωμα:
Ορίσαμε ξανά τη γραμμή στο 0.
this.timebar.set_fraction (0);
-Πέρασμα:
button3.clicked.connect (() => {
this.bd_select_preguntas ();
this.next_pregunta();
});
Επόμενο μέρος (4):
Στην επόμενη δόση θα δούμε πώς να βελτιώσουμε πτυχές της εφαρμογής μας, όπως οι ερωτήσεις να μην εμφανίζονται πάντα στην ίδια θέση, να βάλουν ένα εικονίδιο στην εφαρμογή ...
Λατρεύω τις απαντήσεις ... χαχα .. Χαιρετισμούς
Αυτά τα άρθρα για τη Vala είναι πολύ καλά, περιμένω και τα άλλα, με εκτίμηση
Έχω σε εκκρεμότητα την είσοδό σας στο Vala, ελπίζω να υπάρχουν πολλές παραδόσεις. Χαιρετίσματα!
Ωραίο άρθρο, ευχαριστώ για την κοινή χρήση.
Γεια σας,
Ακολούθησα τις προηγούμενες καταχωρίσεις σας για τη δημιουργία αυτής της εφαρμογής, το πρόβλημα έρχεται τώρα που προσπαθώ να αποκτήσω πρόσβαση στις καταχωρήσεις του νέου παραθύρου, το κάνω με αυτόν τον τρόπο, στη μέθοδο saveC της κλάσης createQuestions (κλάση που δημιουργεί το παράθυρο).
δημόσιο άκυρο saveC () {
string str = questionE.get_text ();
stdout.printf ("Συνθήκη% s \ n", str);
}
Αλλά στην έξοδο το παίρνω αυτό:
(bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: assertion "GTK_IS_ENTRY (είσοδος)" απέτυχε
Συνθήκη (μηδέν)
Έχω δει μερικά παραδείγματα και στον ορισμό των μεθόδων που έχουν πρόσβαση στις εγγραφές κάνουν κάτι σαν αυτό:
void on_activate (Καταχώριση Gtk.Entry) {
όνομα = entry.get_text ();
εκτύπωση ("\ nΓεια" + όνομα + "! \ n \ n");
}
Αλλά έχουν μόνο μία καταχώρηση και σε αυτό το παράδειγμα υπάρχουν 5, οπότε εδώ χάθηκα ήδη, θα μπορούσατε να με καθοδηγήσετε καλύτερα.
Λοιπόν, όταν δημιουργείτε τις καταχωρήσεις δεν τους δίνετε το ίδιο όνομα, για να λάβετε το κείμενο που έχουν κάνετε:
r1 = είσοδος1.get_text ();
r2 = είσοδος2.get_text ();
r3 = είσοδος3.get_text ();
r4 = είσοδος4.get_text ();
Αν θέλετε, βάλτε ένα pastebin και θα το κοιτάξω
lolbimbo Ναι, στην πραγματικότητα τα έχω με διαφορετικά ονόματα, αλλά χρησιμοποιώ μόνο ένα για δοκιμή αφού κανένα από αυτά δεν επιστρέφει το κείμενο που έβαλα στην καταχώρηση, μου στέλνει το προαναφερθέν σφάλμα:
Αλλά στην έξοδο το παίρνω αυτό:
(bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: assertion "GTK_IS_ENTRY (είσοδος)" απέτυχε
Συνθήκη (μηδέν)
Εξακολουθώ να ερευνώ ...
Στην υγειά σας.!!
Έτοιμοι εδώ είναι η πηγή, χαιρετισμοί.
http://pastebin.com/pZG8GbrY
Γεια σας Χιράμ, κοίτα, θα σας πω πώς πρέπει να το κάνετε για να το λύσετε, το πρώτο πράγμα συμβαίνει επειδή δημιουργούμε ένα νέο παράθυρο (δεν είναι το κύριο) και όταν καλούμε την καταχώριση, (συγγνώμη για τις λέξεις) Δεν ξέρω γιατί Αυτό το σκατά δεν επιστρέφει σαν να ήταν μια καταχώριση αλλά ένα Widget, αλλά hey, για να το λύσετε, πρέπει απλώς να αλλάξετε όλα τα στατικά στοιχεία που δημιουργήσατε σε δυναμική χρησιμοποιώντας var:
var questionE = νέο Gtk.Entry ();
τότε η συνάρτηση θα λειτουργήσει και θα λάβετε το κείμενο μέσα στην καταχώρηση.
save.clicked.connect (() => {
// string str = this.questionE.get_text ();
stdout.printf ("Συνθήκη% s \ n", askE.get_text ());
})?
Τέλος, μην ξεχάσετε να αλλάξετε τη γραμμή όπου προσθέτετε την καταχώρηση για να την εμφανίσετε:
askE.show ();
Σας αφήνω τον πλήρη κωδικό με την τροποποίηση για να βεβαιωθείτε ότι λειτουργεί ήδη, δηλαδή εάν πρέπει να αλλάξετε όλα τα στοιχεία (τουλάχιστον την καταχώρηση) για να συνεχίσετε με την εφαρμογή.
http://paste.desdelinux.net/5048
αφορά
Chale, εδώ γύρω με ενοχλεί ξανά, συνεχίζω να έχω προβλήματα, ο κωδικός που μου δείχνεις λειτουργεί καλά, μόνο κάτι συμβαίνει στην περίπτωση:
save.clicked.connect (() => {
// string str = this.questionE.get_text ();
stdout.printf ("Συνθήκη% s \ n", askE.get_text ());
})?
Είναι μέσα στην κλάση Questions και λειτουργεί καλά, αλλά όταν θέλω να το εισάγω από το saveC, δεν μεταγλωττίζεται, μου βγάζει αυτό το σφάλμα:
bu01.vala:50.38-50.50: σφάλμα: Επιχείρημα 1: Δεν είναι δυνατή η μετατροπή από "Questions.saveC" σε "Gtk.Button.clicked"
this.guardar.clicked.connect (this.guardarC);
^^^^^^^^^^^^
bu01.vala: 251.58-251.66: προειδοποίηση: Gtk.Stock έχει καταργηθεί από τις 3.10
bu01.vala: 260.59-260.67: προειδοποίηση: Gtk.Stock έχει καταργηθεί από τις 3.10
Η συλλογή απέτυχε: 1 σφάλμα, 2 προειδοποιήσεις
Θα ήθελα να πιστεύω ότι οφείλεται στον τρόπο με τον οποίο μεταβιβάζω την παράμετρο όταν συμβαίνει το συμβάν κλικ:
this.guardar.clicked.connect (this.guardarC);
Σας ευχαριστώ πολύ εκ των προτέρων για τα σχόλια. Εδώ είναι ο κώδικας που πετάει το σφάλμα: http://pastebin.com/pLzExhrb
Δεν το έχω δοκιμάσει αλλά πιστεύω ότι η αφαίρεση του ορίσματος από τη συνάρτηση θα το πετάξει.
δημόσιο άκυρο saveC (Gtk.Entry askE) {
string str = questionE.get_text ();
stdout.printf ("Συνθήκη% s \ n", str);
}
a:
δημόσιο άκυρο saveC () {
string str = questionE.get_text ();
stdout.printf ("Συνθήκη% s \ n", str);
}
lolbimbo, προσπάθησα να αφαιρέσω το επιχείρημα και ακόμα δεν λειτουργεί,
Εξακολουθώ να προσπαθώ να καταλάβω το πρόβλημα, είμαι νέος στο Vala και δεν μπορώ να βρω πολλή τεκμηρίωση, ελπίζω να βρω τη λύση σύντομα ή να περιμένω μέχρι να κυκλοφορήσετε το τέταρτο μέρος xD.
Συνεχίζω να προσπαθώ ...
Χαιρετισμούς.