Προγραμματισμός σε γραφικό περιβάλλον C. Δημιουργία γραφικής διεπαφής χρησιμοποιώντας Qt

Καλή μέρα! Σε αυτό το σεμινάριο θα δημιουργήσουμε την πρώτη σας εφαρμογή GUI σε MS Visual Studio. Αυτό θα είναι ένα είδος "Hello World" για γραφικές εφαρμογές. Θα το πω αμέσως χρησιμοποιώντας WindowsΤο Forms δεν είναι ο μόνος τρόπος για τους προγραμματιστές C# να δημιουργούν εφαρμογές GUI (εφαρμογές με γραφικό περιβάλλον χρήστη), αλλά είναι ένα καλό μέρος για να ξεκινήσετε. Και έτσι, ας ξεκινήσουμε το Visual Studio.

Ξεκίνησε; Τότε ας ασχοληθούμε! Μεταβείτε στο κύριο μενού και επιλέξτε "Αρχείο - Νέο - Έργο", όπως φαίνεται στην παρακάτω εικόνα.

Στο παράθυρο που εμφανίζεται:

  • στην αριστερή πλευρά επιλέξτε "Πρότυπα - Visual C# - Windows".
  • στην κύρια περιοχή, επιλέξτε το στοιχείο "Εφαρμογή φορμών των Windows".
  • Στο κάτω μέρος του παραθύρου, πληκτρολογήστε το όνομα του έργου και υποδείξτε τη θέση του στο δίσκο.

Σε γενικές γραμμές, όπως φαίνεται στην παρακάτω εικόνα.

Υποδείξατε τι χρειάζεται; Στη συνέχεια, κάντε κλικ στο κουμπί "OK". Θα πρέπει τώρα να δείτε κάτι σαν αυτό (οι κύριες περιοχές επισημαίνονται με ορθογώνια):

Στην παραπάνω εικόνα, έχω επισημάνει τις κύριες περιοχές: την περιοχή σχεδιαστή (πάνω αριστερά), την περιοχή Εξερεύνηση λύσεων (πάνω δεξιά) και την περιοχή ιδιοτήτων (κάτω δεξιά). Αυτοί είναι οι τομείς με τους οποίους θα συνεργαζόμαστε πιο συχνά.

Στην περιοχή σχεδιαστή, υπάρχει τώρα μια κενή "φόρμα", αυτό είναι το λεγόμενο παράθυρο, σε αυτήν την περίπτωση, το κύριο παράθυρο του προγράμματός μας. Η περιοχή ιδιοτήτων εμφανίζει τις ιδιότητες του στοιχείου που έχει επιλεγεί στον σχεδιαστή, σε αυτήν την περίπτωση, τη φόρμα μας, και η περιοχή Εξερεύνηση λύσεων περιέχει αρχεία έργου, συμπεριλαμβανομένων εκείνων που σχετίζονται με φόρμες προγραμμάτων (παράθυρα). Τώρα, ας αλλάξουμε λίγο τη φόρμα μας και ας τρέξουμε αυτήν την πρώτη εφαρμογή.

Για να το κάνετε αυτό, επιλέξτε τη φόρμα στον σχεδιαστή (για να το κάνετε αυτό, μπορείτε απλά να κάνετε αριστερό κλικ στη φόρμα) και μεταβείτε στο μπλοκ ιδιοτήτων, στο οποίο βρίσκουμε τη γραμμή "Κείμενο" (τη λέξη κείμενο, κοιτάξτε στα αριστερά στήλη), όπως φαίνεται στο παρακάτω σχήμα.

Η ιδιότητα "Κείμενο" της κύριας φόρμας της εφαρμογής

Λάβετε υπόψη ότι το όνομα (όνομα του ακινήτου) αναγράφεται στην αριστερή στήλη και η αξία του στη δεξιά στήλη.

Σε αυτήν την περίπτωση, έχουμε να κάνουμε με μια ιδιότητα κειμένου και η τιμή της εμφανίζεται στον τίτλο του παραθύρου, οπότε ας καθορίσουμε τώρα κάτι δικό μας εκεί, για παράδειγμα, κάτι σαν: "Κύριο παράθυρο", όπως φαίνεται στο παρακάτω σχήμα:

Τώρα, μπορείτε να συναρμολογήσετε το έργο και να το ξεκινήσετε. Για να το κάνετε αυτό, μεταβείτε στο κύριο μενού και επιλέξτε "Δημιουργία - Δημιουργία λύσης". Και στη συνέχεια εκκινούμε την εφαρμογή, για να το κάνετε αυτό, επιλέξτε το στοιχείο "Εντοπισμός σφαλμάτων - Εκτέλεση χωρίς εντοπισμό σφαλμάτων" στο κύριο μενού. Ως αποτέλεσμα, θα πρέπει να δείτε το παρακάτω παράθυρο.

Στο επόμενο μάθημα, θα δούμε απλή δουλειάμε έναν σχεδιαστή φόρμας και τη ρύθμιση στοιχείων γραφικής διεπαφής, και αυτό το μάθημα έφτασε στο τέλος του, δημιουργήσαμε την πρώτη γραφική εφαρμογή, τη συναρμολογήσαμε και την εκκινήσαμε.

Γεια σε όλους. Στα προηγούμενα μαθήματά μου, μίλησα για τη δημιουργία εφαρμογών κονσόλας στο περιβάλλον Borland C++ Builder. Ξεκινώντας με αυτό το μάθημα, θα μελετήσουμε την C++ χρησιμοποιώντας ως παράδειγμα γραφικές εφαρμογές. Ποιος θέλει να μάθει πώς να δημιουργεί κονσόλες. Μπορεί να διαβάσει το βιβλίο "The Art of Creating Console Applications in C++". Η πρώτη μας εφαρμογή θα είναι ένα πρόγραμμα που εκτυπώνει έναν τυχαίο αριθμό. Ανοίγουμε το Borland, αλλά δεν δημιουργούμε μια εφαρμογή κονσόλας. Μετά την εκκίνηση, η ακόλουθη φόρμα θα εμφανιστεί στην οθόνη:

Θα υπάρχει μια γραμμή εργαλείων στην κορυφή:

Στα δεξιά είναι το Object Inspector και η Shape List:

Τα στοιχεία (σε αντίθεση με το BASIC) είναι ήδη χωρισμένα σε καρτέλες. Με βάση το όνομα, δεν είναι δύσκολο να μαντέψει κανείς τι είδους εξαρτήματα τοποθετούνται στην καρτέλα. Ανοίξτε την καρτέλα Standard και τοποθετήστε τα στοιχεία στη φόρμα όπως η δική μου:

Το κουμπί θα φέρει την ετικέτα Button1. Πρέπει να αλλάξει. Στο κάτω αριστερό παράθυρο του Borland εμφανίζονται οι ιδιότητες των στοιχείων, πρέπει να αλλάξουν σε δικές μας:

Αλλάξτε το κουμπί Λεζάντα σε Δημιουργία

Αλλάξτε την ιδιότητα Caption του Label1 σε Number

Στο Edit1, απλώς διαγράφουμε την ιδιότητα Text (το κείμενο στην ίδια την επεξεργασία).

Μετά από αυτούς τους χειρισμούς, η φόρμα θα είναι παρόμοια με τη δική μου:

Τελειώσαμε με το οπτικό στυλ, παρεμπιπτόντως, τα περισσότερα ακίνητα στη Μπορλάντια είναι παρόμοια με το BASIC ή τους Δελφούς. Πειραματιστείτε μαζί τους.

Τώρα ας μιλήσουμε για γεγονότα. Κάθε στοιχείο έχει συμβάντα· περιέχει κώδικα που θα εκτελεστεί όταν πληρούνται ορισμένες προϋποθέσεις. Για παράδειγμα, για ένα κουμπί, ο κώδικας στο συμβάν Click θα εκτελεστεί όταν κάνουμε κλικ σε αυτό, κ.λπ.

Σήμερα θα χρησιμοποιήσουμε μόνο το συμβάν Click. Κάντε διπλό κλικ στο κουμπί και εισαγάγετε το παράθυρο κωδικού:

Δημιουργήθηκε αυτόματα ένα συμβάν κλικ για το κουμπί. Ο κωδικός, ακριβώς όπως σε μια εφαρμογή κονσόλας, τοποθετείται ανάμεσα σε σγουρά σιδεράκια. Γράφουμε τον κώδικα:

Void __fastcall TForm1::Button1Click(TObject *Sender) ( double aaa; //Τοποθετήστε εδώ τον αριθμό που δημιουργείται από το πλήθος συμβολοσειρών του επεξεργαστή; //Γράψτε τον ίδιο αριθμό, αλλά ανάγεται σε τυχαία μορφή συμβολοσειράς. //Αυτό είναι απαραίτητο για οι αριθμοί δεν επαναλαμβάνονται aaa=τυχαία (34)*43646; //Δημιουργία οποιουδήποτε αριθμού count=FloatToStr (aaa); //Μετατροπή του αριθμού σε συμβολοσειρά χρησιμοποιώντας τη συνάρτηση FloatToString Edit1->Text=count; //Έξοδος μεταβλητής συμβολοσειράς σε ένα παράθυρο κειμένου)

Ο αλγόριθμος είναι απλός, δηλώνουμε μια μεταβλητή για την αποθήκευση ενός κλασματικού αριθμού σε αυτήν και μια μεταβλητή για την αποθήκευση ενός αριθμού σε μορφή συμβολοσειράς. Το γεγονός είναι ότι ο αριθμός που δημιουργείται δεν μπορεί να εμφανιστεί αμέσως σε ένα πλαίσιο κειμένου (θα υπάρξει σφάλμα: Αναμενόταν κείμενο αλλά ελήφθη αριθμός), επομένως χρησιμοποιώντας τη συνάρτηση FloatToStr μετατρέπουμε τον αριθμό σε συμβολοσειρά και τον εμφανίζουμε στο πλαίσιο κειμένου . Για έξοδο, γυρίζουμε (χρησιμοποιώντας το σύμβολο -> (παρόμοιο με το σημείο στο vb)) στην ιδιότητα κειμένου Edit1 και εξάγουμε το κείμενο εκεί. Αυτα για τωρα.

Παρεμπιπτόντως, μια γρήγορη ερώτηση: ποιος αναπαράγεται πιο γρήγορα; ιούς υπολογιστών, Κινέζοι ή κουνέλια;


Σχόλια ()

Vitay

Αρτιόμκα

"randomize; //Αυτό είναι απαραίτητο για να μην επαναληφθούν οι αριθμοί." Έχω ακόμα επαναλήψεις. τι να κάνω?

Αντρέι

Υπάρχουν 2 επιλογές 1-χρησιμοποιήστε "randomize();" ή στη γραμμή 6 περιπλέκετε τη συνάρτηση π.χ. προσθέστε τον αριθμό των δευτερολέπτων

Αντρέι

"δευτερόλεπτα" ή το αποτέλεσμα της προσθήκης δύο ψευδοτυχαίων αριθμών διαιρεμένων με δευτερόλεπτα - όσο περισσότεροι παράγοντες, τόσο πιο απρόβλεπτος είναι ο αριθμός που προκύπτει

Αρτιόμκα Alexey (alex13sh)

τυχαιοποιούν
Αυτό γίνεται για να μην επαναλαμβάνονται οι αριθμοί όταν είναι ενεργοποιημένο το πρόγραμμα
Λοιπόν, δηλαδή. ενεργοποιήστε το πρόγραμμα, πατήστε το κουμπί πολλές φορές
1)5
2)47
3)86
αυτός είμαι εγώ σε ακέραιους αριθμούς
Λοιπόν, εάν απενεργοποιήσετε το πρόγραμμα και το ενεργοποιήσετε ξανά, πατώντας το κουμπί σειριακά θα παραχθούν οι ίδιοι αριθμοί με τις ίδιες ακολουθίες
αυτό είναι χωρίς τυχαιοποίηση και αυτό δεν θα συμβεί με φωτογραφίες

Και τι επαναλαμβάνεται με αυτόν τον τρόπο
1)3
2)69
3)1
4)3
5)8
6)1
ΑΥΤΟ ΔΕΝ ΙΣΧΥΕΙ ΓΙΑ ΤΗΝ τυχαιοποίηση
για να αποφευχθεί αυτό ο Αντρέι έχει ήδη απαντήσει))

Μπέγκζοντ

Έχω οπτικό c++.net στον υπολογιστή μου. Δεν μπορώ να βρω σχολικά βιβλία ή πηγές για αυτό. Βοήθεια παρακαλώ.

Ali05

Είδα ένα εγχειρίδιο για το Visual C++.Net σε ένα βιβλιοπωλείο "Nikita Kultin Fundamentals of Programming in Microsoft Visual C++ 2010", δείχνει απλώς πώς να δημιουργήσετε γραφικές εφαρμογέςστα Windows (WinForms).

Kulkhatsker Nintendo

Αναρωτιέμαι ποιο είναι το «κακό» του;

Kulkhatsker

Ελλείψει της δυνατότητας κανονικής παρουσίασης του υλικού και συνηθίζοντας σας, κύριοι, σε κακό στυλ προγραμματισμού, τα ονόματα μεταβλητών/συναρτήσεων a la translit.

Εδουάρδος Kulkhatsker

Υπουργείο Παιδείας και Επιστημών της Ρωσικής Ομοσπονδίας

Ομοσπονδιακό κρατικό προϋπολογισμό εκπαιδευτικό ίδρυμα

ανώτερη επαγγελματική εκπαίδευση

«UFA STATE OIL

ΠΟΛΥΤΕΧΝΕΙΟ"

Τμήμα Επιστήμης Υπολογιστών και Μηχανικών Κυβερνητικής

Δημιουργία εφαρμογής με γραφικό περιβάλλον χρήστη στο microsoft visual studio 2010

Εκπαιδευτικό και μεθοδολογικό εγχειρίδιο

για εργαστηριακά και πρακτικά μαθήματα

με μαθητές της κατεύθυνσης

230100 (03/09/01) «Πληροφορική και τεχνολογία υπολογιστών»

Το εκπαιδευτικό εγχειρίδιο περιέχει θεωρητικές πληροφορίες, εργασίες για πρακτική και εργαστηριακή εργασία στο μάθημα «Προγραμματισμός».

Το εγχειρίδιο απευθύνεται σε εκπαιδευτικούς του κλάδου, καθώς και σε μαθητές της κατεύθυνσης: 230100 «Πληροφορική και Επιστήμη Υπολογιστών».

Συντάχθηκε από: Gabdullina A.A., Art. καθηγητής του τμήματος VTIK

Druzhinskaya E.V., Art. καθηγητής του τμήματος VTIK

Κριτής: Filippov V.N., Ph.D., Αναπληρωτής Καθηγητής του τμήματος. VTIK.

1.Θεωρητικές πληροφορίες 4

1.1. Βασικές έννοιες 4

1.2. Γνωριμία εφαρμογή WindowsΦόρμα στο Microsoft Visual Studio 2010 4

1.3. Έλεγχος φόρμας 7

1.5. Λειτουργία MessageBox 9

1.6. Έλεγχος TextBox 10

2. Πρακτική εργασία. Παρουσίαση μιας εφαρμογής φόρμας Windows στο Microsoft Visual Studio 2010 12

2.1. Δομή αξιολόγησης ολοκληρωμένων εργασιών 12

2.2. Η διαδικασία για την εκτέλεση πρακτικής εργασίας 12

3. Εργαστηριακές εργασίες. Ανάπτυξη εφαρμογών στο Microsoft Visual Studio 2010 16

3.1. Διαδικασία εκτέλεσης εργαστηριακών εργασιών 16

3.2. Εργασία 1. Πινακοποίηση μιας συνάρτησης και υπολογισμός των τιμών της σε ένα καθορισμένο διάστημα με ένα δεδομένο βήμα 16

3.3. Ατομικές εργασίες 19

3.4. Εργασία 2. Επεξεργασία δισδιάστατους πίνακες 21

3.5. Ατομικές εργασίες 27

  1. Θεωρητικές πληροφορίες

  1. 1.1. ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ

Η αυτοματοποίηση των διαδικασιών πληροφοριών εμφανίζεται επί του παρόντος κυρίως ως η ανάπτυξη μιας εφαρμογής λογισμικού με γραφική διεπαφή χρήστη (GUI) που διαχειρίζεται τις ροές δεδομένων.

Το Graphical User Interface (GUI) είναι ένα σύστημα εργαλείων για την αλληλεπίδραση του χρήστη με μια συσκευή, που βασίζεται στην αναπαράσταση όλων των αντικειμένων του συστήματος και των λειτουργιών που είναι διαθέσιμες στον χρήστη με τη μορφή γραφικών στοιχείων οθόνης (παράθυρα, κουμπιά, γραμμές κύλισης κ.λπ.) .

Τις περισσότερες φορές, τα στοιχεία διεπαφής σε ένα GUI υλοποιούνται με βάση μεταφορές και εμφανίζουν τον σκοπό και τις ιδιότητές τους, γεγονός που διευκολύνει τους μη εκπαιδευμένους χρήστες να κατανοήσουν και να κυριαρχήσουν τα προγράμματα. Έτσι, ο χρήστης εργάζεται με φόρμες οθόνης που περιέχουν αντικείμενα ελέγχου και γραμμές εργαλείων με κουμπιά ενεργειών για επεξεργασία.

Μια τυπική γραφική διεπαφή χρήστη πρέπει να πληροί ορισμένες απαιτήσεις:

Υποστήριξη της πληροφορικής της εργασίας του χρήστη με το προϊόν λογισμικού.

Εστίαση στον τελικό χρήστη που επικοινωνεί με το πρόγραμμα στο εξωτερικό επίπεδο αλληλεπίδρασης.

Ικανοποιήστε την αρχή του "έξι", όταν μια γραμμή μενού περιλαμβάνει όχι περισσότερες από 6 έννοιες, καθεμία από τις οποίες δεν περιέχει περισσότερες από 6 επιλογές.

    διατηρεί έναν τυποποιημένο σκοπό των γραφικών αντικειμένων και, εάν είναι δυνατόν, τη θέση τους στην οθόνη.

Στον αντικειμενοστραφή προγραμματισμό ασχολούμαστε με κλάσεις και αντικείμενα. Τα αντικείμενα είναι σύνθετοι τύποι δεδομένων: συνδυάζουν πολλαπλές τιμές σε μια ενιαία μονάδα και μας επιτρέπουν να καταγράψουμε και να αποθηκεύσουμε αυτές τις τιμές ονομαστικά. Με άλλα λόγια, ένα αντικείμενο είναι μια μη ταξινομημένη συλλογή ιδιοτήτων, καθεμία από τις οποίες έχει ένα όνομα και μια τιμή. Οι ονομαστικές τιμές που περιέχονται σε ένα αντικείμενο μπορεί να είναι είτε πρωτόγονοι τύποι, όπως αριθμοί ή συμβολοσειρές, είτε άλλα αντικείμενα.

Κατά την ανάπτυξη εφαρμογών εκτός κονσόλας, η κύρια ιδέα είναι το Form.

Μια φόρμα είναι ένα δοχείο για την τοποθέτηση στοιχείων ελέγχου περιβάλλοντος ανάπτυξης.

Ιδιότητες - η δυνατότητα απόκτησης πρόσβασης σε πληροφορίες που είναι αποθηκευμένες σε αυτό το στοιχείο.

Οι μέθοδοι είναι ένα σύνολο ενεργειών που μπορεί να εκτελέσει ένα αντικείμενο.

Ένα συμβάν είναι μια ενέργεια που αναγνωρίζεται από ένα αντικείμενο (για παράδειγμα, ένα κλικ του ποντικιού, ένα πάτημα πλήκτρων), για το οποίο μπορεί να προγραμματιστεί μια απάντηση, π.χ. αντίδραση του αντικειμένου στο γεγονός.

Τελευταία ενημέρωση: 26/05/2019

Στο Xamarin.Forms, η οπτική διεπαφή αποτελείται από σελίδες. Μια σελίδα είναι ένα αντικείμενο της κλάσης Page και καταλαμβάνει ολόκληρο τον χώρο της οθόνης. Αυτό βλέπουμε στην οθόνη κινητή συσκευή- αυτή είναι η σελίδα. Μια εφαρμογή μπορεί να έχει μία ή περισσότερες σελίδες.

Η σελίδα λαμβάνει ως περιεχόμενό της ένα από τα δοχεία διάταξης, το οποίο με τη σειρά του περιέχει τυπικά οπτικά στοιχεία, όπως κουμπιά και πεδία κειμένου, καθώς και άλλα στοιχεία διάταξης.

Ας πάρουμε το έργο HelloApp που δημιουργήθηκε στο προηγούμενο θέμα (ή δημιουργήστε ένα νέο). Από προεπιλογή, ολόκληρη η διεπαφή δημιουργείται στην κλάση App, η οποία βρίσκεται στο αρχείο App.xaml.cs και αντιπροσωπεύει την τρέχουσα εφαρμογή:

Ο προεπιλεγμένος κωδικός του είναι:

Χρήση του συστήματος. χρησιμοποιώντας Xamarin.Forms; χρησιμοποιώντας Xamarin.Forms.Xaml; namespace HelloApp ( δημόσια μερική κλάση Εφαρμογή: Εφαρμογή ( δημόσια εφαρμογή() ( InitializeComponent(); MainPage = νέο MainPage(); ) προστατευμένη παράκαμψη void OnStart() ( // Χειρισμός όταν ξεκινά η εφαρμογή σας ) προστατευμένη παράκαμψη void OnSleep() ( / / Χειρισμός όταν η εφαρμογή σας κοιμάται ) προστατευμένη παράκαμψη void OnResume() ( // Χειρισμός όταν η εφαρμογή σας συνεχίζεται) ) )

Η εργασία της κλάσης App ξεκινά με τον κατασκευαστή, όπου αρχικά καλείται η μέθοδος InitializeComponent(), η οποία αρχικοποιεί το αντικείμενο και, στη συνέχεια, ορίζεται η ιδιότητα MainPage. Μέσω αυτής της ιδιότητας, τα σύνολα κλάσης εφαρμογών αρχική σελίδαεφαρμογές. Σε αυτήν την περίπτωση, ορίζεται από την κλάση HelloApp.MainPage, δηλαδή την κλάση που ορίζεται στα αρχεία MainPage.xaml και MainPage.xaml.cs.

Αλλά αυτός ο τρόπος δεν είναι ο μόνος. Το Xamarin.Forms σάς επιτρέπει να δημιουργήσετε μια οπτική διεπαφή είτε χρησιμοποιώντας κώδικα C# είτε δηλωτικά χρησιμοποιώντας τη γλώσσα xaml, παρόμοια με την html, ή συνδυασμό αυτών των προσεγγίσεων.

Δημιουργία διεπαφής από κώδικα C#

Ας προσθέσουμε μια κανονική τάξη στο C# στο έργο HelloApp, το οποίο θα ονομάσουμε StartPage .

Και ορίστε το ακόλουθο περιεχόμενο σε αυτήν την τάξη:

Χρήση Xamarin.Forms; namespace HelloApp ( class StartPage: ContentPage ( public StartPage() ( Label header = new Label() ( Text = "Hello from Xamarin Forms" ); this.Content = header; ) ) )

Αυτή η κλάση αντιπροσωπεύει μια σελίδα, επομένως κληρονομεί από την κλάση ContentPage. Ο κατασκευαστής δημιουργεί μια ετικέτα με κείμενο, η οποία ορίζεται ως το περιεχόμενο της σελίδας (this.Content = κεφαλίδα).

Για να ορίσετε το MainPage ως αρχική σελίδα, αλλάξτε την κατηγορία εφαρμογών:

Χρήση Xamarin.Forms; namespace HelloApp ( δημόσια μερική κλάση Εφαρμογή: Εφαρμογή ( δημόσια εφαρμογή() ( InitializeComponent(); MainPage = new StartPage(); ) προστατευμένη παράκαμψη void OnStart() ( // Χειρισμός όταν ξεκινά η εφαρμογή σας ) προστατευμένη παράκαμψη void OnSleep() ( / / Χειρισμός όταν η εφαρμογή σας κοιμάται ) προστατευμένη παράκαμψη void OnResume() ( // Χειρισμός όταν η εφαρμογή σας συνεχίζεται) ) )

Η ιδιότητα MainPage δείχνει τώρα τη νεοδημιουργηθείσα σελίδα έναρξης.

Αξίζει επίσης να σημειωθεί ότι το Visual Studio διαθέτει ένα έτοιμο πρότυπο για την προσθήκη νέων κλάσεων σελίδων με απλό κώδικα. Επομένως, για να προσθέσετε μια νέα σελίδα, πρέπει να επιλέξετε το πρότυπο Σελίδα περιεχομένου (C#) όταν προσθέτετε ένα νέο στοιχείο:

Αυτή η κλάση προστίθεται στο κύριο έργο λύσης (σε αυτήν την περίπτωση, το HelloApp).

Η κλάση σελίδων που προστέθηκε θα έχει τον ακόλουθο κώδικα:

Χρήση του συστήματος. χρησιμοποιώντας System.Collections.Generic; χρησιμοποιώντας System.Linq; χρησιμοποιώντας System.Reflection.Emit; χρησιμοποιώντας System.Text; χρησιμοποιώντας Xamarin.Forms; namespace HelloApp ( δημόσια τάξη Σελίδα1: ContentPage ( δημόσια Σελίδα1() ( Περιεχόμενο = νέο StackLayout ( Παιδιά = ( νέα ετικέτα ( Κείμενο = "Γεια σας σελίδα") ) ) ) )

Αυτή η κλάση θα κληρονομήσει επίσης από τη βασική κλάση ContentPage και θα έχει σχεδόν την ίδια οργάνωση με την τάξη MainPage που δημιουργήθηκε παραπάνω.

Και επίσης στην τάξη εφαρμογών μπορούμε να ορίσουμε αυτή τη σελίδα ως αρχική σελίδα:

Χρήση Xamarin.Forms; namespace HelloApp ( δημόσια μερική κλάση Εφαρμογή: Εφαρμογή ( δημόσια εφαρμογή() ( InitializeComponent(); MainPage = νέα Σελίδα1(); ) //........ ) )

5

Έχω δημιουργήσει πολλές διαφορετικές ενότητες του συστήματος GUI για το Nintendo DS, όπως κουμπιά και πεδία κειμένου και πλαίσια ελέγχου, αλλά χρειάζομαι έναν τρόπο για να κρύψω αυτές τις κλάσεις σε μια τάξη Gui, ώστε να μπορώ να σχεδιάσω τα πάντα στην οθόνη ταυτόχρονα, και ελέγξτε όλα τα κουμπιά ταυτόχρονα, ώστε να ελέγξετε εάν έχουν πατηθεί κάποια κουμπιά. Η ερώτησή μου είναι ποιος είναι ο καλύτερος τρόπος για να οργανωθούν όλες οι τάξεις (όπως κουμπιά και πεδία κειμένου) σε μία κατηγορία GUI;

Εδώ είναι ένας τρόπος που σκέφτηκα, αλλά δεν φαίνεται σωστός:

Επεξεργασία:Χρησιμοποιώ C++.

Class Gui ( public: void update_all(); void draw_all() const; int add_button(Button *button); // Returns button id void remove_button(int button_id); private: Button *buttons; int num_buttons; )

Αυτός ο κωδικός έχει μερικά προβλήματα, αλλά ήθελα απλώς να σας δώσω μια ιδέα για το τι θέλω.

  • 5 απαντήσεις
  • Ταξινόμηση:

    Δραστηριότητα

2

Αυτή η ερώτηση μοιάζει πολύ με αυτή που θα έβαζα, μόνο η δική μου είναι για προγραμματισμό Sony PSP.

Έψαχνα κάτι για λίγο, έχω συμβουλευτεί μερικά βιβλία και VTM, και μέχρι στιγμής αυτή είναι μια πρόχειρη ιδέα για απλά συστήματα Ui.

Κλάση uiElement() ( ... virtual void Update() = 0; virtual void Draw() = 0; ... ) class uiButton() public: uiElement ( ... virtual void Update(); virtual void Draw() ; ... ) class uiTextbox() public: uiElement ( ... virtual void Update(); virtual void Draw(); ... ) ... // Other ui Elements class uiWindow() ( ... void Update (); void Draw(); void AddElement(uiElement *Element); void RemoveElement(uiElement *Element); std::list Στοιχεία; ... ) void uiWindow::Update() ( ... για (λίστα ::iterator it = Elements.begin(); it != Elements.end(); it++) it->Update(); ... ) void uiWindow::Draw() ( ... για (λίστα ::iterator it = Elements.begin(); it != Elements.end(); it++) it->Draw(); ...)

Η αρχή είναι να δημιουργήσετε ένα παράθυρο και να προσεγγίσετε στοιχεία διεπαφή χρήστησε αυτό και καλέστε τις μεθόδους απόδοσης και ενημέρωσης από τις αντίστοιχες κύριες συναρτήσεις.

Τίποτα δεν λειτουργεί ακόμα για μένα γιατί έχω προβλήματα με τον κώδικα σχεδίασης. Με διάφορα API σε υπολογιστή και PSP, κοιτάζω τον κώδικα περιτυλίγματος για το OpenGL και το psp gu.

Ελπίζω αυτό να βοηθήσει.

0

Μια χρήσιμη στρατηγική που πρέπει να έχετε κατά νου μπορεί να είναι το σύνθετο μοτίβο. Σε χαμηλό επίπεδο, μπορεί να σας επιτρέψει να χειρίζεστε πιο εύκολα όλα τα αντικείμενα GUI (και τις συλλογές αντικειμένων) μετά τη δημιουργία τους. Αλλά δεν ξέρω τι περιλαμβάνει ο σχεδιασμός γραφικής διεπαφής GUI, επομένως ένα μέρος για να βρείτε γενική έμπνευση είναι ο πηγαίος κώδικας ενός υπάρχοντος έργου. Το WxWidgets είναι ένα γραφικό περιβάλλον πολλαπλών πλατφορμών με προσβάσιμο πηγαίος κώδικας. Καλή τύχη με το έργο σας!

0

3

Για όσους ενδιαφέρονται, εδώ είναι το κιτ εργαλείων GUI ανοιχτού κώδικα, με άδεια BSD για DS:

Η απάντηση του Subject2k είναι αρκετά καλή, αλλά θα συνιστούσα σοβαρά να έχετε τον κωδικό που περιέχει τα στοιχεία θυγατρικής διεπαφής στη βασική κλάση uiElement. Αυτό είναι το μοτίβο που ακολούθησα στο Whoopsie.

Αν εσύ Δενυποστηρίζει αυτό σε μια βασική κλάση, θα αντιμετωπίσετε σοβαρά προβλήματα όταν προσπαθείτε να εφαρμόσετε οτιδήποτε πιο περίπλοκο από ένα πλαίσιο κειμένου και ένα κουμπί. Για παράδειγμα:

  • Τα πάνελ πίνακα μπορούν να μοντελοποιηθούν ως πολλαπλά κουμπιά ομαδοποιημένα σε ένα μοναδικό γονικό στοιχείο διεπαφής χρήστη που παρέχει αμοιβαία αποκλειστικότητα επιλογής.
  • Ομάδες ραδιοφωνικών σταθμών (με την πάροδο του χρόνου).
  • Οι γραμμές κύλισης μπορούν να αναπαρασταθούν ως ρυθμιστικό/στοιχείο υδρορροής και κουμπί πάνω/κάτω.
  • Οι λίστες κύλισης μπορούν να αντιπροσωπεύονται από ένα κοντέινερ και πολλά στοιχεία διεπαφής χρήστη.

Επίσης, αξίζει να θυμάστε ότι το DS διαθέτει επεξεργαστή 66MHz και 4MB μνήμης RAM, η οποία χρησιμοποιείται τόσο για την αποθήκευση του προγράμματός σας όσο και για την εκτέλεση του (οι δίσκοι DS φορτώνονται στη μνήμη RAM πριν εκτελεστούν). Πρέπει πραγματικά να το αντιμετωπίσετε ως ένα ενσωματωμένο σύστημα, πράγμα που σημαίνει ότι δεν υπάρχει STL. Αφαίρεσα το STL από το Woopsi και κατάφερα να εξοικονομήσω 0,5MB. Όχι πολύ από τα πρότυπα επιτραπέζιου υπολογιστή, αλλά είναι το 1/8 της συνολικής διαθέσιμης μνήμης DS που καταναλώνεται από τα σκουπίδια STL.

Αναφέρω λεπτομερώς ολόκληρη τη διαδικασία σύνταξης μιας διεπαφής χρήστη στο ιστολόγιό μου:

Περιλαμβάνει μια περιγραφή δύο αλγορίθμων που βρήκα για την επανασχεδίαση της οθόνης, που είναι το δύσκολο κομμάτι της δημιουργίας ενός GUI (ο ένας απλώς χωρίζει τα ορθογώνια και θυμάται τις ορατές περιοχές και ο άλλος χρησιμοποιεί δέντρα BSP, που είναι πολύ πιο αποτελεσματικό και πιο εύκολα κατανοητές), συμβουλές βελτιστοποίησης, κ.λπ. δ.



Φόρτωση...
Μπλουζα