Χρησιμοποιεί το QT C ++
Πλαίσιο QT
Τα QT Essentials ορίζουν το θεμέλιο του QT σε όλες τις πλατφόρμες. Διατίθενται σε όλες τις υποστηριζόμενες πλατφόρμες ανάπτυξης και στις δοκιμασμένες πλατφόρμες προορισμού.
Περίληψη:
1. Το QT Framework είναι ένα ολοκληρωμένο σύνολο μαθημάτων βιβλιοθήκης C ++ που απλοποιούν την ανάπτυξη εφαρμογών.
2. Το QT παράγει εξαιρετικά αναγνώσιμο, διατηρήσιμο και επαναχρησιμοποιήσιμο κώδικα με υψηλή απόδοση χρόνου εκτέλεσης και ένα μικρό αποτύπωμα.
3. Το QT είναι cross-platform, επιτρέποντας στους προγραμματιστές να δημιουργούν εφαρμογές για πολλαπλές πλατφόρμες.
4. Τα βασικά στοιχεία QT, όπως το QT Core, το QT GUI, το QT Multimedia, το Qt Network, το Qt Quick και το QT SQL, αποτελούν το θεμέλιο του QT σε όλες τις πλατφόρμες.
5. Το QT παρέχει επίσης πρόσθετα όπως QT OpenGL, QT Wayland Compositor, αισθητήρες QT, QT WebView, QT Safe Renderer και QT SCXML για συγκεκριμένες εργασίες.
6. Το πλαίσιο QT δίνει προτεραιότητα στην αντιμετώπιση πιθανών απειλών ευπάθειας και ανησυχιών για την ασφάλεια.
7. Οι προγραμματιστές θα πρέπει να έχουν προηγούμενη γνώση του C ++ πριν χρησιμοποιήσουν το QT.
8. Η σειρά Tutorial QT καλύπτει θέματα όπως υπενθύμιση C ++, Εισαγωγή σε QT, Χαρακτηριστικά Creator, Δημιουργία παραθύρων και κουμπιών, ιεραρχία κλάσης QT και πολλά άλλα.
9. Το πρότυπο παρατηρητή, τα σήματα και οι υποδοχές και οι πληροφορίες μετάδοσης είναι μερικές από τις προηγμένες λειτουργίες που καλύπτονται στη σειρά Tutorial Series.
Ερωτήσεις:
- Χρησιμοποιεί το QT γ++?
Ναι, το QT είναι κυρίως γραμμένο σε C ++ και παρέχει ένα σύνολο μαθημάτων βιβλιοθήκης C ++ για ανάπτυξη εφαρμογών. - Τι είναι τα βασικά qt?
Τα βασικά qt είναι τα θεμέλια του QT και περιλαμβάνουν ενότητες όπως QT Core, QT GUI, QT Multimedia, Qt Network, Qt Quick και QT SQL. - Τι είναι μερικά πρόσθετα QT?
Ορισμένα πρόσθετα QT περιλαμβάνουν το QT OpenGL, το QT Wayland Compositor, τους αισθητήρες QT, το QT WebView, το QT Safe Renderer και το QT SCXML. - Πώς δίνει προτεραιότητα στο QT?
Η ομάδα QT ασχολείται ενεργά με πιθανές ευπάθειες και ανησυχίες για την ασφάλεια και ακολουθεί μια πολιτική ασφαλείας που περιγράφεται στην πολιτική ασφάλειας του έργου QT. - Τι γνώση απαιτείται για τη χρήση του QT?
Οι προγραμματιστές θα πρέπει να έχουν γνώση του C ++ πριν ξεκινήσουν με το QT. - Ποια θέματα καλύπτονται στη σειρά Tutorial QT?
Η σειρά Tutorial καλύπτει θέματα όπως μια υπενθύμιση C ++, Εισαγωγή σε QT, χαρακτηριστικά Creator QT, Δημιουργία παραθύρων και κουμπιά, ιεραρχία QT κλάσης και πολλά άλλα. - Ποιες προχωρημένες λειτουργίες καλύπτονται στη σειρά Tutorial?
Η σειρά Tutorial καλύπτει προηγμένες λειτουργίες όπως το πρότυπο παρατηρητή, τα σήματα και οι υποδοχές και η μετάδοση πληροφοριών. - Είναι qt cross-platform?
Ναι, το QT είναι cross-platform και επιτρέπει στους προγραμματιστές να δημιουργούν εφαρμογές που εκτελούνται σε πολλαπλές πλατφόρμες. - Ποιος είναι ο σκοπός του QT essential και qt add-ons?
Το QT Essential παρέχει το θεμέλιο του QT, ενώ τα πρόσθετα QT προσφέρουν πρόσθετη λειτουργικότητα για συγκεκριμένες εργασίες. - Πώς εξασφαλίζει η Qt ασφάλεια?
Το QT αναλύει ενεργά τις εκθέσεις ευπάθειας και λαμβάνει άμεση δράση για να τις αντιμετωπίσει. Η ομάδα QT συμμετέχει επίσης σε σχετικές ομάδες διεύθυνσης για ανησυχίες για την ασφάλεια. - Ποια είναι τα οφέλη από τη χρήση του QT?
Το QT επιτρέπει στους προγραμματιστές να γράφουν εξαιρετικά ευανάγνωστο και διατηρήσιμο κώδικα με εξαιρετική απόδοση χρόνου εκτέλεσης. Παρέχει επίσης δυνατότητες cross-platform. - Ποιο είναι το πλαίσιο QT?
Το πλαίσιο QT αποτελείται από ένα ολοκληρωμένο σύνολο μαθημάτων βιβλιοθήκης C ++ που απλοποιούν την ανάπτυξη εφαρμογών και παρέχουν modularity. - Ποιο είναι το μοτίβο παρατηρητών?
Το μοτίβο παρατηρητή είναι ένα σχέδιο σχεδιασμού όπου ένα αντικείμενο, που ονομάζεται θέμα, διατηρεί μια λίστα παρατηρητών που εξαρτώνται από αυτό. Όταν η κατάσταση του υποκειμένου αλλάζει, ειδοποιεί όλους τους παρατηρητές του να ενημερώνονται αυτόματα. - Τι είναι τα σήματα και οι σχισμές?
Τα σήματα και οι υποδοχές είναι ένας μηχανισμός στο QT για επικοινωνία μεταξύ αντικειμένων. Τα σήματα εκπέμπονται από αντικείμενα όταν συμβαίνουν συγκεκριμένα συμβάντα και οι υποδοχές είναι λειτουργίες που μπορούν να συνδεθούν για να λαμβάνουν και να χειρίζονται τα σήματα. - Πώς μπορούν να μεταδοθούν πληροφορίες στο QT?
Οι πληροφορίες μπορούν να μεταδοθούν στο QT χρησιμοποιώντας σήματα και υποδοχές, όπου τα σήματα μεταφέρουν τις πληροφορίες και τις υποδοχές που λαμβάνουν και επεξεργάζονται.
Απαντήσεις:
1. Χρησιμοποιεί το QT γ++?
Ναι, το QT χρησιμοποιεί κυρίως C ++ για την ανάπτυξή του. Αυτό επιτρέπει στους προγραμματιστές να αξιοποιούν την ισχύ και την ευελιξία της γλώσσας C ++ στις εφαρμογές QT τους.
2. Τι είναι τα βασικά qt?
Τα βασικά στοιχεία QT είναι θεμελιώδεις ενότητες στο QT που αποτελούν το θεμέλιο του πλαισίου. Αυτά περιλαμβάνουν το QT Core, το QT GUI, το QT Multimedia, το QT Network, το QT Quick και το QT SQL. Παρέχουν βασική λειτουργικότητα για διάφορες πτυχές της ανάπτυξης εφαρμογών, όπως μη γραφικές κατηγορίες, εξαρτήματα γραφικών διεπαφών χρήστη, υποστήριξη πολυμέσων, προγραμματισμός δικτύου, ανάπτυξη δηλωτικής εφαρμογής και ενσωμάτωση βάσεων δεδομένων χρησιμοποιώντας SQL.
3. Τι είναι μερικά πρόσθετα QT?
Το QT παρέχει διάφορα πρόσθετα που προσφέρουν πρόσθετη λειτουργικότητα για συγκεκριμένες εργασίες. Μερικά παραδείγματα πρόσθετων QT είναι:
- QT OpenGL: Κλάσεις για υποστήριξη OpenGL. Αποσπάστηκε υπέρ των τάξεων Qopengl στη μονάδα QT GUI.
- QT Wayland Compositor: Πλαίσιο για την ανάπτυξη ενός συνθέτη Wayland.
- Αισθητήρες QT: Κλάσεις για πρόσβαση στο υλικό αισθητήρα και ενεργοποίηση αναγνώρισης χειροκίνητης κίνησης.
- QT WebView: Μια ενότητα που επιτρέπει την εμφάνιση περιεχομένου ιστού σε μια εφαρμογή QML χρησιμοποιώντας API-Native API αντί για πλήρη στοίβα προγράμματος περιήγησης ιστού.
- QT Safe Renderer: Παρέχει ένα στοιχείο απόδοσης UI για την απόδοση αντικειμένων κρίσιμης για την ασφάλεια, όπως προειδοποιητικοί δείκτες, σε λειτουργικά συστήματα ασφαλείας.
- QT SCXML: Προσφέρει μαθήματα και εργαλεία για τη δημιουργία μηχανών κατάστασης από τα αρχεία SCXML και την ενσωμάτωσή τους σε εφαρμογές.
4. Πώς δίνει προτεραιότητα στο QT?
Η ομάδα QT λαμβάνει σοβαρά υπόψη τις ανησυχίες της ασφάλειας και έχει μια ειδική προσέγγιση για την αντιμετώπιση πιθανών τρωτών σημείων. Καθώς το QT αναπτύσσεται ως έργο ανοιχτού κώδικα, η ανάλυση της αναφοράς ευπάθειας γίνεται από καθορισμένους μέλη του προσωπικού και εξωτερικούς συνεισφέροντες. Η ομάδα QT συμμετέχει ενεργά σε σχετικές ομάδες διεύθυνσης και αναλαμβάνει αμέσως δράση κατά τη λήψη αναφορών ευπάθειας. Λεπτομερείς διαδικασίες για τον χειρισμό των αναφορών ευπάθειας περιγράφονται στην πολιτική ασφάλειας του έργου QT.
5. Τι γνώση απαιτείται για τη χρήση του QT?
Πριν ξεκινήσετε με το QT, συνιστάται να έχετε καλή κατανόηση του Γ++. Το QT χρησιμοποιεί έντονα το C ++ για την ανάπτυξή του και έχοντας μια σταθερή κατανόηση της γλώσσας θα διευκολύνει την εργασία με το πλαίσιο QT και τα API της.
6. Ποια θέματα καλύπτονται στη σειρά Tutorial QT?
Η σειρά Tutorial QT καλύπτει ένα ευρύ φάσμα θεμάτων για να βοηθήσει τους αρχάριους να ξεκινήσουν με την ανάπτυξη εφαρμογών QT. Μερικά από τα θέματα που καλύπτονται περιλαμβάνουν:
- Μια υπενθύμιση C ++ για την ανανέωση των βασικών στοιχείων
- Εισαγωγή στο QT, τα χαρακτηριστικά της και τις δυνατότητες Cross-Platform
- Ένας οδηγός για την εγκατάσταση του QT SDK
- Μια επισκόπηση του QT Creator και των χαρακτηριστικών του
- Δημιουργία του πρώτου παραθύρου και κατανόηση της διαδικασίας συλλογής
- Προσθήκη διαδραστικών στοιχείων όπως κουμπιά στην εφαρμογή
- Κατανόηση της ιεραρχίας της κατηγορίας QT και της έννοιας του qobject parenting
- Υποκατηγορία qwidget και δημιουργία προσαρμοσμένων widgets
- Περαιτέρω πόρους και συστάσεις ανάγνωσης
7. Ποιες προχωρημένες λειτουργίες καλύπτονται στη σειρά Tutorial?
Εκτός από τα βασικά, η σειρά Tutorial QT βυθίζεται σε πιο προηγμένα θέματα. Μερικά παραδείγματα των προχωρημένων χαρακτηριστικών που καλύπτονται είναι:
- Το πρότυπο παρατηρητή: Εξερεύνηση της έννοιας και πώς να το εφαρμόσετε σε εφαρμογές QT
- Σήματα και υποδοχές: Κατανόηση του μηχανισμού επικοινωνίας μεταξύ αντικειμένων
- Πληροφορίες μετάδοσης: Πώς να μεταφέρετε πληροφορίες μεταξύ διαφορετικών τμημάτων της εφαρμογής χρησιμοποιώντας σήματα και υποδοχές
- Χαρακτηριστικά σημάτων και υποδοχών: Πρόσθετα χαρακτηριστικά και δυνατότητες των σημάτων και του μηχανισμού υποδοχής
8. Είναι qt cross-platform?
Ναι, το QT είναι ένα πλαίσιο cross-platform. Επιτρέπει στους προγραμματιστές να γράφουν τις εφαρμογές τους μία φορά και να τις αναπτύξουν σε πολλές πλατφόρμες, συμπεριλαμβανομένων των Windows, MacOS, Linux, Android και iOS. Το QT παρέχει αφαίρεσης και API που χειρίζονται τις λεπτομέρειες που σχετίζονται με την πλατφόρμα, καθιστώντας ευκολότερη την ανάπτυξη εφαρμογών που λειτουργούν με συνέπεια σε διαφορετικά λειτουργικά συστήματα.
9. Ποιος είναι ο σκοπός του QT essential και qt add-ons?
Τα QT Essentials αποτελούν το θεμέλιο του πλαισίου QT παρέχοντας βασικές λειτουργίες και κλάσεις που χρησιμοποιούνται ευρέως στην ανάπτυξη εφαρμογών. Εξασφαλίζουν μια συνεπή και αξιόπιστη αναπτυξιακή εμπειρία σε διαφορετικές πλατφόρμες. Από την άλλη πλευρά, τα πρόσθετα QT προσφέρουν πρόσθετες ενότητες και χαρακτηριστικά που είναι πιο συγκεκριμένα σε ορισμένες περιπτώσεις χρήσης ή τομείς. Παρέχουν εκτεταμένη λειτουργικότητα και δυνατότητες πέρα από τα βασικά στοιχεία.
10. Πώς εξασφαλίζει η Qt ασφάλεια?
Το QT λαμβάνει μια προληπτική προσέγγιση στην ασφάλεια, αναλύοντας ενεργά και αντιμετωπίζοντας πιθανές ευπάθειες στα προϊόντα της. Η ομάδα QT συμμετέχει σε σχετικές ομάδες διεύθυνσης και ανταποκρίνεται αμέσως σε αναφορές ευπάθειας. Επιπλέον, ως έργο ανοιχτού κώδικα, η QT προσκαλεί εξωτερικούς συνεισφέροντες να αναθεωρήσουν και να αναλύσουν τον κώδικα, ενισχύοντας τη συνολική ασφάλεια του πλαισίου.
11. Ποια είναι τα οφέλη από τη χρήση του QT?
Υπάρχουν πολλά οφέλη για τη χρήση QT για ανάπτυξη εφαρμογών:
- Το QT παρέχει ένα ολοκληρωμένο σύνολο κλάσεων βιβλιοθήκης C ++ που απλοποιούν την ανάπτυξη εφαρμογών, καθιστώντας την ταχύτερη και ευκολότερη δημιουργία ισχυρών εφαρμογών.
- Ο κώδικας που γράφτηκε με το QT είναι εξαιρετικά ευανάγνωστος, διατηρήσιμος και επαναχρησιμοποιήσιμος, μειώνοντας τις αναπτυξιακές προσπάθειες και βελτιώνοντας την παραγωγικότητα.
- Το QT είναι cross-platform, επιτρέποντας στους προγραμματιστές να γράψουν μια εφαρμογή μία φορά και να την αναπτύξουν σε πολλαπλές πλατφόρμες.
- Το πλαίσιο προσφέρει εξαιρετική απόδοση χρόνου εκτέλεσης, εξασφαλίζοντας ομαλές και ανταποκρινόμενες εφαρμογές.
- Το QT έχει ένα μικρό αποτύπωμα, που σημαίνει ότι τα προκύπτοντα εκτελέσιμα είναι συμπαγή και αποτελεσματικά.
12. Ποιο είναι το πλαίσιο QT?
Το QT Framework είναι μια ολοκληρωμένη συλλογή μαθημάτων βιβλιοθήκης C ++ που παρέχουν ένα ευρύ φάσμα λειτουργικότητας για την ανάπτυξη εφαρμογών. Προσφέρει μια διαμορφωμένη δομή, επιτρέποντας στους προγραμματιστές να χρησιμοποιούν μόνο τα στοιχεία που χρειάζονται. Το QT παρέχει εργαλεία, API και αφαίρεση για διάφορες πτυχές της ανάπτυξης εφαρμογών, συμπεριλαμβανομένου του σχεδιασμού διεπαφής χρήστη, της ενσωμάτωσης της βάσης δεδομένων, της δικτύωσης, των πολυμέσων και πολλά άλλα. Έχει σχεδιαστεί για να απλοποιήσει τη διαδικασία ανάπτυξης, να προωθήσει την επαναχρησιμοποίηση κώδικα και να ενεργοποιήσει την ανάπτυξη εφαρμογών cross-platform.
13. Ποιο είναι το μοτίβο παρατηρητών?
Το μοτίβο παρατηρητή είναι ένα μοτίβο σχεδιασμού συμπεριφοράς που επιτρέπει την επικοινωνία ενός προς πολλά μεταξύ αντικειμένων. Στο πρότυπο παρατηρητή, υπάρχουν δύο κύριες οντότητες: το θέμα και οι παρατηρητές. Το θέμα διατηρεί έναν κατάλογο παρατηρητών και τα ειδοποιεί αυτόματα όταν αλλάζει η κατάσταση του. Αυτό το πρότυπο προάγει τη χαλαρή σύζευξη μεταξύ αντικειμένων και επιτρέπει ένα εξαιρετικά διαδραστικό και δυναμικό σύστημα. Στο QT, το πρότυπο παρατηρητή μπορεί να εφαρμοστεί χρησιμοποιώντας σήματα και σχισμές, όπου το θέμα εκπέμπει σήματα και οι παρατηρητές συνδέουν τις υποδοχές τους με τα σήματα για να λαμβάνουν ενημερώσεις.
14. Τι είναι τα σήματα και οι σχισμές?
Τα σήματα και οι υποδοχές είναι ένας μηχανισμός που παρέχεται από το QT για επικοινωνία μεταξύ αντικειμένων. Ένα σήμα είναι μια ειδική συνάρτηση μέλους μιας κλάσης που προέρχεται από το QObject που μπορεί να εκπέμπεται για να υποδείξει ότι έχει συμβεί ένα συγκεκριμένο συμβάν ή κατάσταση. Μια υποδοχή είναι μια συνάρτηση μέλους που μπορεί να συνδεθεί σε ένα σήμα για να λαμβάνει και να το χειριστεί. Τα σήματα και οι υποδοχές μπορούν να χρησιμοποιηθούν για τη δημιουργία χαλαρής σύζευξης μεταξύ αντικειμένων, επιτρέποντάς τους να επικοινωνούν χωρίς να είναι στενά συνδεδεμένα μεταξύ τους. Αυτό προάγει τη modularity και την ευελιξία στο σχεδιασμό εφαρμογών QT.
15. Πώς μπορούν να μεταδοθούν πληροφορίες στο QT?
Στο QT, μπορούν να μεταδοθούν πληροφορίες μεταξύ διαφορετικών τμημάτων μιας εφαρμογής χρησιμοποιώντας σήματα και υποδοχές. Ένα σήμα μπορεί να μεταφέρει πληροφορίες καθορίζοντας τις παραμέτρους και μια υποδοχή μπορεί να λάβει και να επεξεργαστεί αυτές τις πληροφορίες. Όταν εκπέμπεται ένα σήμα, όλες οι συνδεδεμένες υποδοχές θα καλούνται με τις παρεχόμενες πληροφορίες. Αυτός ο μηχανισμός επιτρέπει στα αντικείμενα να επικοινωνούν και να ανταλλάσσουν δεδομένα χωρίς να αναφέρονται άμεσα, προωθώντας τη χαλαρή σύζευξη και την ευελιξία στο σχεδιασμό της εφαρμογής.
Πλαίσιο QT
Τα QT Essentials ορίζουν το θεμέλιο του QT σε όλες τις πλατφόρμες. Διατίθενται σε όλες τις υποστηριζόμενες πλατφόρμες ανάπτυξης και στις δοκιμασμένες πλατφόρμες προορισμού.
Χρησιμοποιεί το QT γ++
Э э э э э э э э э э э э э э э э э э э э э э э э э э э э э э э э э э
Ы з з з з з з з и и и и п п п п п п з п з з з з з з з з з п. С п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п п. ПOчем э э э э э э э э э э э п п п п п п п?
Э э э э э а а а а и е е з з л л л л л л л э э э э э э э э э э э э Κοιτάζοντας το ριμπάγ. С с п п п п п э э э э э э э э э э э э э э э э э э э э э э э э э э э э. Д э э э э д д д и и д д д ρίας н и д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д.
И и з а а а а а а а а ы ы з .. Е е е е д п п ж ж ж ж ж ж ж ж ж ж ж ж ж ж ж ж ж ж п п п п п п п п п п п п п п п п п. Орrρά. Пороннαι.
ПON п п е е а а τροφή пρέφ а а а а а τροφήλου. е е е и τροφή ее же жÉ в в ж и и и и ч ч.
Πλαίσιο QT
Το QT Framework περιέχει ένα ολοκληρωμένο σύνολο πολύ διαισθητικών και διαμορφωμένων κλάσεων βιβλιοθήκης C ++ και φορτώνεται με APIs για να απλοποιήσει την ανάπτυξη της εφαρμογής σας. Το QT παράγει εξαιρετικά ευανάγνωστο, εύκολα διατηρήσιμο και επαναχρησιμοποιήσιμο κώδικα με υψηλή απόδοση χρόνου εκτέλεσης και μικρό αποτύπωμα-και είναι cross-platform.
Qt essentials
Καθιστώντας δυνατή την πραγματική πλατφόρμα
Τα QT Essentials ορίζουν το θεμέλιο του QT σε όλες τις πλατφόρμες. Διατίθενται σε όλες τις υποστηριζόμενες πλατφόρμες ανάπτυξης και στις δοκιμασμένες πλατφόρμες προορισμού.
Πυρήνας QT
Βασικές μη γραφικές κατηγορίες που χρησιμοποιούνται από άλλες ενότητες.
QT GUI
Κλάσεις βάσης για γραφικά στοιχεία διεπαφής χρήστη. Περιλαμβάνει το OpenGL.
QT Multimedia
Τάξεις για λειτουργικότητα ήχου, βίντεο, ραδιοφώνου και κάμερας.
Δίκτυο QT
Τάξεις για να διευκολύνουν τον προγραμματισμό δικτύου.
Qt Quick
Ένα δηλωτικό πλαίσιο για την οικοδόμηση εξαιρετικά δυναμικών εφαρμογών με προσαρμοσμένες διεπαφές χρήστη.
QT SQL
Τάξεις για ενσωμάτωση βάσης δεδομένων χρησιμοποιώντας SQL.
Qt add-ons
Τα σωστά πρόσθετα
για τη σωστή εργασία
Τα QT Essentials ορίζουν το θεμέλιο του QT σε όλες τις πλατφόρμες. Διατίθενται σε όλες τις υποστηριζόμενες πλατφόρμες ανάπτυξης και στις δοκιμασμένες πλατφόρμες προορισμού.
Qt opengl
Μαθήματα υποστήριξης OpenGL. Αποσπάστηκε υπέρ των τάξεων Qopengl στη μονάδα QT GUI.
QT Wayland Compositor
Παρέχει ένα πλαίσιο για την ανάπτυξη ενός συνθέτη Wayland.
Αισθητήρες QT
Παρέχει πρόσβαση σε υλικό αισθητήρα και αναγνώριση χειρονομίας κίνησης.
QT WebView
Εμφανίζει το περιεχόμενο ιστού σε μια εφαρμογή QML χρησιμοποιώντας API που είναι εγγενή στην πλατφόρμα, χωρίς να χρειάζεται να συμπεριλάβετε μια πλήρη στοίβα προγράμματος περιήγησης ιστού.
Qt safe renderer
Παρέχει ένα στοιχείο απόδοσης UI που μπορεί να χρησιμοποιηθεί για την κατασκευή αντικειμένων κρίσιμης για την ασφάλεια, όπως προειδοποιητικοί δείκτες, σε λειτουργικά συστήματα ασφαλείας.
QT SCXML
Παρέχει κλάσεις και εργαλεία για τη δημιουργία μηχανών κατάστασης από αρχεία SCXML και την ενσωμάτωσή τους σε εφαρμογές.
Πρακτικές πλαισίου QT για τη διαχείριση των ανησυχιών για την ασφάλεια
Η ομάδα QT δίνει προτεραιότητα στην αντιμετώπιση πιθανών απειλών ευπάθειας και ανησυχιών για την ασφάλεια στα προϊόντα της. Με την ευρεία εφαρμογή της πλατφόρμας και το εκτεταμένο API, το πλαίσιο QT είναι ευαίσθητο σε κινδύνους στον κυβερνοχώρο σε διάφορα μέτωπα. Επιπλέον, το QT αναπτύσσεται ως έργο ανοιχτού κώδικα, απαιτώντας ανάλυση αναφοράς ευπάθειας από καθορισμένα μέλη του προσωπικού και εξωτερικούς συνεισφέροντες. Από την ίδρυσή της, η ομάδα QT συμμετέχει ενεργά στις σχετικές ομάδες διεύθυνσης και λαμβάνει άμεση δράση στις αναφορές ευπάθειας. Οι εκθέσεις ευπάθειας διέπονται από συγκεκριμένες διαδικασίες που περιγράφονται στην πολιτική ασφάλειας του έργου QT.
QT για αρχάριους
Προειδοποίηση : Να είστε βέβαιος να έχετε κάποια γνώση του C ++ πριν ξεκινήσετε!
Παρατήρηση : Αυτή η σειρά Tutorial Target κυρίως QT4. Ακόμη και αν τα περισσότερα από αυτά τα μαθήματα ισχύουν επίσης για το QT5, η περίπτωση του QT5 συζητείται σε ξεχωριστό μέρος.
Περιεχόμενα
- Υπενθύμιση 1 C ++
- 2 Εισαγωγή στο QT
- 3 Εγκατάσταση QT SDK
- 4 Χαρακτηριστικά δημιουργίας QT
- 5 Το πρώτο μας παράθυρο
- 6 Πώς καταρτίζεται ένα πρόγραμμα QT
- 7 Ένα όμορφο κουμπί
- 8 ιεραρχία κατηγορίας QT
- 9 σύστημα γονικής μέριμνας
- 10 υποκατηγορία qwidget
- 11 Περαιτέρω ανάγνωση
- 12 Το μοτίβο παρατηρητή
- 13 σήματα και υποδοχές
- 14 Πληροφορίες μετάδοσης
- 15 χαρακτηριστικά σημάτων και υποδοχών
- 16 παραδείγματα
- 16.1 Απαντώντας σε μια εκδήλωση
- 21.1 Δημιουργία προσαρμοσμένων υποδοχών
- 21.2 Δημιουργία σημάτων
- 21.3 Παράδειγμα
Υπενθύμιση C ++
ο υπογραφή μιας μεθόδου ή μιας λειτουργίας είναι απλά το πρωτότυπο του. Περιγράφει πλήρως μια μέθοδο ή μια λειτουργία. Περιέχει τον τύπο που επιστρέφεται, το όνομα της μεθόδου/συνάρτησης (συμπεριλαμβανομένου του ονόματος της κλάσης) και των παραμέτρων, συμπεριλαμβανομένων των τύπων.
Τύπος MyObject::μυκητιασμός( Τύπος1 param1, Τύπος2 *param2, κονσερβός Τύπος3 ¶m3 )
Νέο στο QT? Δεν ξέρω πώς να ξεκινήσω? Τότε αυτή η σελίδα wiki είναι για εσάς! Είναι ένα βήμα προς βήμα σεμινάριο που παρουσιάζει όλες τις ιδιαιτερότητες και τα χαρακτηριστικά του QT. Θέλετε να μάθετε περισσότερα? Ελέγξτε τις τάξεις C ++ GUI για τις τάξεις QT 5 και C ++ GUI για το QT 6.
Εισαγωγή στο QT
Το QT (προφέρεται ως “χαριτωμένο”, όχι “Cu-Tee”) είναι ένα πλαίσιο cross-platform που χρησιμοποιείται συνήθως ως γραφικό εργαλείο, αν και είναι επίσης πολύ χρήσιμο στη δημιουργία εφαρμογών CLI. Τρέχει στα τρία μεγάλα επιτραπέζια OS, καθώς και σε κινητά OSEs, όπως Symbian, Nokia Belle, Meego Harmattan, Meego ή BB10 και σε ενσωματωμένες συσκευές. Οι θύρες για το Android (Neaditas) και το iOS βρίσκονται επίσης σε εξέλιξη.
Το QT έχει μια εντυπωσιακή συλλογή από μονάδες, συμπεριλαμβανομένων
- Qtcore, μια βιβλιοθήκη βάσης που παρέχει δοχεία, διαχείριση νήματος, διαχείριση συμβάντων και πολλά άλλα
- Qtgui και Qtwidgets, Ένα εργαλείο GUI για την επιφάνεια εργασίας, που παρέχει πολλά γραφικά εξαρτήματα για το σχεδιασμό εφαρμογών.
- Qtnetwork, που παρέχει ένα χρήσιμο σύνολο τάξεων για την αντιμετώπιση των επικοινωνιών δικτύου
- Qtwebkit, Ο κινητήρας Webkit, που επιτρέπει τη χρήση ιστοσελίδων και εφαρμογών ιστού σε μια εφαρμογή QT.
- QTSQL, Ένα πλήρες χαρακτηρισμένο στρώμα αφαίρεσης SQL RDBM Extensible με τους δικούς τους οδηγούς, υποστήριξη για ODBC, SQLite, MySQL και PostgreSQL είναι διαθέσιμο από το κουτί
- Qtxml, Υποστήριξη για απλή ανάλυση XML (SAX) και DOM
- Qtxmlpatterns, Υποστήριξη για επικύρωση XSLT, XPATH, XQuery και Schema
Εγκατάσταση QT SDK
Για να αρχίσετε να γράφετε εφαρμογές QT, πρέπει να λάβετε βιβλιοθήκες QT και, αν θέλετε, ένα IDE. Μπορούν να κατασκευαστούν από την πηγή, ή καλύτερα, να μεταφορτωθούν ως SDK από τη σελίδα λήψης.
Αυτό το SDK περιλαμβάνει πολλά χαρακτηριστικά, όπως Cross Compilers for Symbian και Nokia N9. Μπορεί να επιλέξετε να μην τα εγκαταστήσετε επιλέγοντας “προσαρμοσμένη εγκατάσταση”. Φροντίστε να διατηρήσετε αυτά τα πακέτα
- Τεκμηρίωση QMake
- Τεκμηρίωση QT
- Qt 4.8.1 (επιφάνεια εργασίας), Υποθέτοντας ότι το Qt 4.8.1 είναι η τελευταία έκδοση.
- Δημιουργός QT
Αυτά τα πακέτα μπορούν επίσης να είναι χρήσιμα
- Παραδείγματα QT
- QT γλωσσολόγος
Μπορείτε να επιλέξετε άλλα πακέτα εάν θέλετε να αναπτύξετε για Symbian / Maemo / Meego, ή με παλαιότερη έκδοση του QT.
Σβούνι : Στο Linux, είναι καλύτερο να χρησιμοποιήσετε τα πακέτα που παρέχει η διανομή σας. Το QT Creator θα πρέπει να είναι διαθέσιμος σε όλες σχεδόν τις κατανομές και η εγκατάσταση θα πρέπει να εγκαταστήσει όλες τις εξαρτήσεις, όπως βιβλιοθήκες, μεταγλωττιστές και κεφαλίδες ανάπτυξης.
Σημείωση: Δείτε την επίσημη εκκίνηση με τη σελίδα Widgets QT για ένα εναλλακτικό σεμινάριο.
Είμαστε τώρα έτοιμοι να δημιουργήσουμε το πρώτο μας παράθυρο. Και θα είναι συνήθως, α Γειά σου Κόσμε.
Χαρακτηριστικά qt Creator
Πριν γράψουμε την πρώτη μας εφαρμογή GUI, ας ανακαλύψουμε το QT Creator.
Το QT Creator είναι ακόμα ένα IDE για το C ++, αλλά είναι πολύ κατάλληλο για εφαρμογές QT κωδικοποίησης. Παρέχει ένα πρόγραμμα περιήγησης DOC και το “Designer”, το οποίο διευκολύνει τη δημιουργία των Windows, όλα τυλιγμένα σε ένα καλά σχεδιασμένο περιβάλλον χρήστη. Είναι επίσης ένα από τα ταχύτερα διαθέσιμα IDE.
Το πρώτο μας παράθυρο
Ας ξεκινήσουμε δημιουργώντας το πρώτο μας έργο. Θα είναι ένα άδειο έργο, οπότε πρέπει να προχωρήσουμε με: Αρχείο> Νέο αρχείο ή έργο> Άλλα έργα> Άδεκωμα QT Project
Ακολουθήστε τον οδηγό και μετά την επιλογή του φακέλου και του ονόματος του έργου και επιλέξτε την έκδοση του QT για χρήση, θα πρέπει να προσγειωθείτε σε αυτή τη σελίδα
Αυτό είναι το αρχείο έργου (επέκταση .Pro). Το QT χρησιμοποιεί ένα εργαλείο γραμμής εντολών που αναλύει αυτά τα αρχεία έργου για να δημιουργήσει “makefiles”, αρχεία που χρησιμοποιούνται από μεταγλωττιστές για την κατασκευή μιας εφαρμογής. Αυτό το εργαλείο καλείται qmake. Αλλά, δεν πρέπει να ενοχλούμε πάρα πολύ για το QMake, αφού ο Kt Creator θα κάνει τη δουλειά για εμάς.
Σε ένα αρχείο έργου, υπάρχει κάποιος ελάχιστος κώδικας που πρέπει πάντα να γράφεται:
Πρότυπο = App Target = name_of_the_app qt = Core GUI GreaterThan (QT_MAJOR_VERSION, 4): QT += Widgets
- ΠΡΟΤΥΠΟ περιγράφει τον τύπο για την κατασκευή. Μπορεί να είναι μια εφαρμογή, μια βιβλιοθήκη ή απλά υποκαταλόγοι.
- ΣΤΟΧΟΣ είναι το όνομα της εφαρμογής ή της βιβλιοθήκης.
- ΕΤ χρησιμοποιείται για να υποδείξει ποιες βιβλιοθήκες (μονάδες QT) χρησιμοποιούνται σε αυτό το έργο. Δεδομένου ότι η πρώτη μας εφαρμογή είναι ένα μικρό GUI, θα χρειαστούμε QTCORE και QTGUI.
Ας προσθέσουμε τώρα το σημείο εισόδου της αίτησής μας. Χρήση αρχείου> Νέο αρχείο ή έργο> C ++> C ++ Το αρχείο προέλευσης πρέπει να κάνει τη δουλειά.
Ακολουθήστε τον οδηγό για άλλη μια φορά, ονομάζοντας το αρχείο “Main”, και τελειώσατε. Θα παρατηρήσετε ότι στο αρχείο του έργου, μια νέα γραμμή έχει προστεθεί αυτόματα από το QT Creator:
Πρότυπο = App Target = name_of_the_app qt = Core GUI Greaterthan (QT_MAJOR_VERSION, 4): QT += Widgets Sources += Main.CPP
Τα αρχεία κεφαλίδων και πηγών μπορούν να προστεθούν με το χέρι
Κεφαλίδες += first_file.H Second_file.H Πηγές += First_file.cpp second_file.CPP
Κεφαλίδες += first_file.H Second_file.H Πηγές += First_file.cpp second_file.CPP
Εάν χρησιμοποιείτε τους οδηγούς του QT Creator, αυτό γίνεται αυτόματα.
Ο ελάχιστος πηγαίος κώδικας μιας εφαρμογής QT είναι
#περιλαμβάνω int κύριος(int argc, απανθρακώνω **argv· Qapplication εφαρμογή (argc, argv) ΕΠΙΣΤΡΟΦΗ εφαρμογή.εκτέλεση(); >
Qapplication είναι μια πολύ σημαντική τάξη. Φροντίζει τα επιχειρήματα εισροών, αλλά και πολλά άλλα πράγματα, και κυρίως, το βρόχος εκδήλωσης. Ο βρόχος συμβάντος είναι ένας βρόχος που περιμένει την είσοδο του χρήστη σε εφαρμογές GUI.
Όταν καλείτε την εφαρμογή.exec () Ο βρόχος συμβάντος ξεκινά.
Ας καταγράψουμε αυτήν την εφαρμογή. Κάνοντας κλικ στο πράσινο βέλος στο κάτω αριστερό. Και τι έγινε? Η αίτηση φαίνεται να ξεκινά και να μην ανταποκρίνεται. Αυτό είναι πραγματικά φυσιολογικό. Ο βρόχος συμβάντος τρέχει και περιμένει συμβάντα, όπως κλικ του ποντικιού σε GUI, αλλά δεν παρέχουμε κανένα συμβάν για επεξεργασία, οπότε θα τρέξει επ ‘αόριστον.
Ας προσθέσουμε κάτι που πρέπει να εμφανιστεί.
#περιλαμβάνω #περιλαμβάνω int κύριος(int argc, απανθρακώνω **argv· Qapplication εφαρμογή (argc, argv) Qpushbutton κουμπί ("Γειά σου Κόσμε !«) κουμπί.προβολή(); ΕΠΙΣΤΡΟΦΗ εφαρμογή.εκτέλεση(); >
Συντάξτε το, και … εδώ είναι ! Το πρώτο μας παράθυρο !
Πώς καταρτίζεται ένα πρόγραμμα QT
Το QT Creator κάνει τη δουλειά να επικαλείται το σύστημα κατασκευής για εμάς, αλλά ίσως είναι ενδιαφέρον να γνωρίζουμε πώς καταρτίζονται τα προγράμματα QT.
Για μικρά προγράμματα, είναι εύκολο να μεταγλωττίσουμε τα πάντα με το χέρι, στη δημιουργία αρχείων αντικειμένων και στη συνέχεια στη σύνδεσή τους. Αλλά για μεγαλύτερα έργα, η γραμμή εντολών γίνεται εύκολα δύσκολο να γράψει. Εάν είστε εξοικειωμένοι με το Linux, ίσως γνωρίζετε ότι όλα τα προγράμματα καταρτίζονται χρησιμοποιώντας ένα makefile που περιγράφει όλες αυτές τις γραμμές εντολών για εκτέλεση. Αλλά για ορισμένα έργα, ακόμη και η γραφή ενός makefile μπορεί να γίνει κουραστική.
qmake είναι το σύστημα κατασκευής που συνοδεύει το QT και δημιουργεί αυτά τα makefiles για εσάς (υπάρχουν άλλα συστήματα κατασκευής που μπορούν να χρησιμοποιηθούν, αλλά εδώ δίνουμε ένα παράδειγμα με qmake·. Με μια απλή σύνταξη, παράγει το makefile που χρησιμοποιείται για την κατάρτιση ενός προγράμματος QT. Αλλά αυτό δεν είναι ο μόνος σκοπός του. Το QT χρησιμοποιεί μετα-αντικείμενα για την επέκταση των λειτουργιών C ++ και το QMake είναι υπεύθυνο για την προετοιμασία ενός makefile που περιέχει αυτή τη φάση εξαγωγής μετα-αντικειμένου. Θα το δείτε σε άλλο κεφάλαιο.
Έτσι, οι εφαρμογές QT καταρτίζονται σε 3 βήματα
- ΕΝΑ .επαγγελματικός Το αρχείο είναι γραμμένο για να περιγράψει το έργο για τη σύνταξη
- Δημιουργείται ένα makefile χρησιμοποιώντας qmake
- Το πρόγραμμα είναι κατασκευασμένο χρησιμοποιώντας φτιαχνω, κανω (ή κέξ ή τριβείο στα παράθυρα)
Ένα όμορφο κουμπί
Αυτό το κεφάλαιο δίνει μια επισκόπηση των μονάδων widgets. Θα καλύψει τις ιδιότητες widgets, το σχήμα κληρονομιάς που χρησιμοποιείται σε widgets, καθώς και στο σύστημα γονικής μέριμνας.
Τώρα που έχουμε το κουμπί μας, ίσως θέλουμε να το προσαρμόσουμε λίγο.
Τα αντικείμενα QT έχουν πολλά χαρακτηριστικά που μπορούν να τροποποιηθούν χρησιμοποιώντας getters και setters. Στο QT, εάν καλείται ένα χαρακτηριστικό φουλάρι, Ο σχετικός getter και setter θα έχει αυτές τις υπογραφές
Τ φουλάρι() κονσερβός; κενός σειριάζω(κονσερβός Τ)
Στην πραγματικότητα, το QT επεκτείνει αυτό το σύστημα χαρακτηριστικών και getters και setters σε κάτι που ονομάζεται ιδιοκτησία. Μια ιδιότητα είναι μια τιμή οποιουδήποτε τύπου που μπορεί να προσεγγιστεί, να τροποποιηθεί ή να είναι σταθερή και μπορεί να ειδοποιήσει μια αλλαγή. Το σύστημα ιδιοκτησίας είναι χρήσιμο, ειδικά στο τρίτο μέρος (QML). Προς το παρόν, θα χρησιμοποιήσουμε το “χαρακτηριστικό” ή την “ιδιοκτησία” για να κάνουμε το ίδιο πράγμα.
Ένα qpushbutton έχει πολλές ιδιότητες:
Έτσι μπορούμε να τα χρησιμοποιήσουμε για να προσαρμόσουμε το κουμπί.
Ας αλλάξουμε πρώτα το κείμενο και προσθέτουμε μια εργαλειοθήκη
#περιλαμβάνω #περιλαμβάνω int κύριος(int argc, απανθρακώνω **argv· Qapplication εφαρμογή (argc, argv) Qpushbutton κουμπί; κουμπί.ντετέκτιβ("Το κείμενό μου") κουμπί.ντετέκτιβ("Μια εργαλειοθήκη") κουμπί.προβολή(); ΕΠΙΣΤΡΟΦΗ εφαρμογή.εκτέλεση(); >
Εδώ είναι το αποτέλεσμα:
Μπορούμε επίσης να αλλάξουμε τη γραμματοσειρά. Στο QT, μια γραμματοσειρά αντιπροσωπεύεται με την κλάση QFONT. Η τεκμηρίωση παρέχει πολλές πληροφορίες. Ανησυχούμε ιδιαίτερα εδώ με έναν από τους κατασκευαστές του QFONT.
Qfont(κονσερβός Qstring & οικογένεια, int σημείων = -1, int βάρος = -1, φουσκωτό πλάγιος = ψευδής·
Προκειμένου να αλλάξουμε τη γραμματοσειρά, πρέπει να δημιουργήσουμε μια κλάση QFONT και να την περάσουμε στο QpushButton χρησιμοποιώντας το SetFont . Το ακόλουθο απόσπασμα θα αλλάξει τη γραμματοσειρά στο courier.
Qfont γραμματοσειρά ("Μεταφορέας") κουμπί.τεμάχιο(γραμματοσειρά)
Μπορείτε να δοκιμάσετε άλλες παραμέτρους του κατασκευαστή του QFONT για να αναπαράγετε το κουμπί που αντιπροσωπεύεται στην πρώτη εικόνα σε αυτό το κεφάλαιο.
Ο καθορισμός ενός εικονιδίου δεν είναι πολύ δύσκολο. Ένα εικονίδιο αντιπροσωπεύεται με την τάξη Qicon. Και μπορείτε να δημιουργήσετε ένα εικονίδιο υπό την προϋπόθεση ότι έχει μια απόλυτη (ή σχετική) διαδρομή στο σύστημα αρχείων. Σας συνιστώ να παρέχετε την απόλυτη διαδρομή σε αυτό το παράδειγμα. Αλλά για εκτιμήσεις ανάπτυξης, μπορείτε να χρησιμοποιήσετε τη σχετική διαδρομή ή καλύτερα το σύστημα πόρων.
Τσίκον εικόνισμα ("/PATH/TO/MY/ICON/ICON.png ") κουμπί.σύνολο(εικόνισμα)
Στο Linux, και μερικά άλλα OS, υπάρχει ένας βολικός τρόπος για να ορίσετε ένα εικονίδιο από ένα εικονίδιο θέμα. Μπορεί να γίνει χρησιμοποιώντας τη στατική μέθοδο:
Τσίκον Τσίκον::από το theme ( κονσερβός Qstring &όνομα, κονσερβός Τσίκον &παρασκευή = Τσίκον())
Για παράδειγμα, στο στιγμιότυπο οθόνης στην αρχή αυτού του κεφαλαίου, το Smiley προέρχεται από το θέμα του oxygen kde icon και καθορίστηκε από:
κουμπί.σύνολο(Τσίκον::από το theme("πρόσωπο-χαμόγελο"))
Ιεραρχία κατηγορίας QT
Το QT χρησιμοποιεί ευρέως κληρονομιά, ειδικά στη μονάδα Widgets. Το παρακάτω γράφημα δείχνει μερικές από αυτές τις κληρονομίες:
Το Qobject είναι η πιο βασική τάξη στο QT. Οι περισσότερες τάξεις στο QT κληρονομούν από αυτήν την τάξη. Το Qobject παρέχει μερικές πολύ ισχυρές δυνατότητες όπως:
- όνομα αντικειμένου : Μπορείτε να ορίσετε ένα όνομα, ως συμβολοσειρά, σε ένα αντικείμενο και να αναζητήσετε αντικείμενα με ονόματα.
- σύστημα γονικής μέριμνας (περιγράφεται στην επόμενη ενότητα)
- σήματα και υποδοχές (περιγράφεται στο επόμενο κεφάλαιο)
- διαχείρηση γεγονότων
Τα widgets είναι σε θέση να ανταποκριθούν σε γεγονότα και να χρησιμοποιούν το σύστημα γονικής μέριμνας και τα σήματα και τον μηχανισμό των υποδοχών. Όλα τα widgets κληρονομούν από το qobject. Το πιο βασικό widget είναι το qwidget . Το QWidget περιέχει τις περισσότερες ιδιότητες που χρησιμοποιούνται για να περιγράψουν ένα παράθυρο ή ένα γραφικό στοιχείο, όπως η θέση και το μέγεθος, ο δρομέας του ποντικιού, τα εργαλεία κ.λπ.
Παρατήρηση : Στο QT, ένα widget μπορεί επίσης να είναι ένα παράθυρο. Στην προηγούμενη ενότητα, εμφανίζαμε ένα κουμπί που είναι ένα γραφικό στοιχείο, αλλά εμφανίζεται απευθείας ως παράθυρο. Δεν υπάρχει ανάγκη για μια τάξη “Qwindow”.
Σχεδόν όλα τα γραφικά στοιχεία κληρονομούν από το qwidget. Μπορούμε να απαριθμήσουμε για παράδειγμα:
QabstractButton, μια κλάση βάσης για όλους τους τύπους κουμπιών Qpushbutton QCheckbox Qradiobutton Qframe, που εμφανίζει ένα πλαίσιο Qlabel, που εμφανίζει κείμενο ή εικόνα
Αυτή η κληρονομιά γίνεται προκειμένου να διευκολυνθεί η διαχείριση ιδιοτήτων. Οι κοινές ιδιότητες όπως το μέγεθος και οι δρομείς μπορούν να χρησιμοποιηθούν σε άλλα γραφικά εξαρτήματα και το QabstractButton παρέχει βασικές ιδιότητες που μοιράζονται από όλα τα κουμπιά.
Σύστημα γονικής μέριμνας
Το σύστημα γονικής μέριμνας είναι ένας βολικός τρόπος αντιμετώπισης αντικειμένων στο QT, ειδικά widgets. Οποιοδήποτε αντικείμενο που κληρονομεί από το QObject μπορεί να έχει γονέα και παιδιά. Αυτό το δέντρο ιεραρχίας κάνει πολλά πράγματα βολικά:
- Όταν καταστρέφεται ένα αντικείμενο, όλα τα παιδιά του καταστρέφονται επίσης. Λοιπόν, καλώντας διαγράφω γίνεται προαιρετικό σε ορισμένες περιπτώσεις.
- Όλα τα qobjects έχουν εύνοιος και φουσκάλια Μέθοδοι που μπορούν να χρησιμοποιηθούν για την αναζήτηση παιδιών ενός συγκεκριμένου αντικειμένου.
- Τα widget των παιδιών σε ένα QWidget εμφανίζονται αυτόματα μέσα στο γονικό γραφικό στοιχείο.
Το ακόλουθο απόσπασμα που δημιουργεί ένα qpushbutton μέσα σε ένα qpushbutton:
#περιλαμβάνω #περιλαμβάνω int κύριος(int argc, απανθρακώνω **argv· Qapplication εφαρμογή (argc, argv) Qpushbutton κουμπί1 ("δοκιμή") Qpushbutton κουμπί2 ("άλλα", &κουμπί1) κουμπί1.προβολή(); ΕΠΙΣΤΡΟΦΗ εφαρμογή.εκτέλεση(); >
Μπορείτε επίσης να σημειώσετε ότι όταν η εφαρμογή είναι κλειστή, κουμπί1, που διατίθεται στη στοίβα, διατίθεται. Δεδομένου ότι το Button2 έχει το Button1 ως γονέας, διαγράφεται επίσης. Μπορείτε ακόμη και να το δοκιμάσετε στον δημιουργό QT στην ενότητα Analyze, αναζητώντας μια διαρροή μνήμης – δεν θα υπάρχει κανένα.
Δεν υπάρχει σαφώς κανένα όφελος στην τοποθέτηση ενός κουμπιού μέσα σε ένα κουμπί, αλλά με βάση αυτή την ιδέα, ίσως να θέλουμε να βάλουμε κουμπιά μέσα σε ένα δοχείο, που δεν εμφανίζει τίποτα. Αυτό το δοχείο είναι απλά το qwidget .
Ο παρακάτω κωδικός χρησιμοποιείται για την εμφάνιση ενός κουμπιού μέσα σε ένα γραφικό στοιχείο:
#περιλαμβάνω #περιλαμβάνω int κύριος(int argc, απανθρακώνω **argv· Qapplication εφαρμογή (argc, argv) Qwidget παράθυρο; παράθυρο.setFixedSize(100, 50) Qpushbutton *κουμπί = νέος Qpushbutton("Γειά σου Κόσμε", &παράθυρο) κουμπί->ορυχετρία(10, 10, 80, 30) παράθυρο.προβολή(); ΕΠΙΣΤΡΟΦΗ εφαρμογή.εκτέλεση(); >
Σημειώστε ότι δημιουργούμε ένα widget σταθερού μεγέθους (που λειτουργεί ως παράθυρο) χρησιμοποιώντας setFixedSize. Αυτή η μέθοδος έχει την ακόλουθη υπογραφή:
κενός Qwidget::setFixedSize(int πλάτος, int ύψος)
Τοποθετήσαμε επίσης το κουμπί χρησιμοποιώντας ορυχετρία. Αυτή η μέθοδος έχει την ακόλουθη υπογραφή:
κενός Qwidget::ορυχετρία(int Χ, int y, int πλάτος, int ύψος)
Υποκατηγορία qwidget
Μέχρι τώρα, έχουμε βάλει όλο τον κώδικα μας στο κύριος λειτουργία. Αυτό δεν ήταν πρόβλημα για τα απλά μας παραδείγματα, αλλά για όλο και πιο περίπλοκες εφαρμογές ίσως θέλαμε να χωρίσουμε τον κώδικα μας σε διαφορετικές κατηγορίες. Αυτό που γίνεται συχνά είναι να δημιουργήσετε μια κλάση που χρησιμοποιείται για την εμφάνιση ενός παραθύρου και την εφαρμογή όλων των γραφικών στοιχείων που περιέχονται σε αυτό το παράθυρο ως χαρακτηριστικά αυτής της κλάσης.
Μέσα στο QT Creator, μπορείτε να δημιουργήσετε αυτόματα μια νέα κλάση με αρχείο> νέο αρχείο ή Project> C ++> C ++ Class
Κάντε την κλάση κληρονομήσει από το qwidget και θα πρέπει να αποκτήσετε κώδικα παρόμοιο με παρακάτω
#ifndef Window_h #define window_h #περιλαμβάνω τάξη Παράθυρο : δημόσιο Qwidget Q_object δημόσιο: σαφής Παράθυρο(Qwidget *μητρική εταιρεία = 0) σήματα: δημόσιο κουλοχέρηδες: >; #τέλος εαν // window_h
#περιλαμβάνω "παράθυρο.Η " Παράθυρο::Παράθυρο(Qwidget *μητρική εταιρεία· : Qwidget(μητρική εταιρεία· <>
Μπορείτε να δείτε ότι ο δημιουργός QT δημιουργεί αυτόματα ένα πρότυπο κλάσης. Παρατηρήστε ότι υπάρχουν μερικά νέα στοιχεία στην κεφαλίδα:
- ο Q_object μακροεντολή.
- Μια νέα κατηγορία μεθόδων: σήματα
- Μια νέα κατηγορία μεθόδων: δημόσια κουλοχέρη
Όλα αυτά τα στοιχεία θα εξηγηθούν στο επόμενο κεφάλαιο και κανένα από αυτά δεν χρειάζεται τώρα. Η εφαρμογή του παραθύρου γίνεται στον κατασκευαστή. Μπορούμε να δηλώσουμε το μέγεθος του παραθύρου, καθώς και τα widget που περιέχει αυτό το παράθυρο και τις θέσεις τους. Για παράδειγμα, η εφαρμογή του προηγούμενου παραθύρου που περιέχει ένα κουμπί μπορεί να γίνει με αυτόν τον τρόπο:
#περιλαμβάνω #περιλαμβάνω "παράθυρο.Η " int κύριος(int argc, απανθρακώνω **argv· Qapplication εφαρμογή (argc, argv) Παράθυρο παράθυρο; παράθυρο.προβολή(); ΕΠΙΣΤΡΟΦΗ εφαρμογή.εκτέλεση(); >
#ifndef Window_h #define window_h #περιλαμβάνω τάξη Qpushbutton; τάξη Παράθυρο : δημόσιο Qwidget δημόσιο: σαφής Παράθυρο(Qwidget *μητρική εταιρεία = 0) ιδιωτικός: Qpushbutton *m_button; >; #τέλος εαν // window_h
#περιλαμβάνω "παράθυρο.Η " #περιλαμβάνω Παράθυρο::Παράθυρο(Qwidget *μητρική εταιρεία· : Qwidget(μητρική εταιρεία· // Ρύθμιση μεγέθους του παραθύρου setFixedSize(100, 50) // Δημιουργία και τοποθετήστε το κουμπί m_button = νέος Qpushbutton("Γειά σου Κόσμε", Αυτό) m_button->ορυχετρία(10, 10, 80, 30) >
Λάβετε υπόψη ότι δεν υπάρχει ανάγκη για τη σύνταξη ενός καταστροφέα για τη διαγραφή του M_Button . Με το σύστημα γονικής μέριμνας, όταν η παρουσία του παραθύρου είναι έξω από τη στοίβα, το M_Button διαγράφεται αυτόματα.
Περαιτέρω ανάγνωση
Μια καλύτερη επισκόπηση του qpushbutton δίνεται σε αυτή τη σελίδα wiki πώς να χρησιμοποιήσετε το qpushbutton
Το πρότυπο παρατηρητή
Σχεδόν όλα τα εργαλεία UI έχουν έναν μηχανισμό για την ανίχνευση μιας δράσης χρήστη και ανταποκρίνονται σε αυτήν την ενέργεια. Μερικοί από αυτούς χρησιμοποιούν επανάκλημα, άλλοι χρησιμοποιούν ακροατές, Αλλά βασικά, όλα αυτά είναι εμπνευσμένα από το μοτίβο παρατηρητών.
Το μοτίβο παρατηρητή χρησιμοποιείται όταν ένα αισθητός Το αντικείμενο θέλει να ειδοποιήσει άλλους παρατηρητής Αντικείμενα σχετικά με μια αλλαγή κατάστασης. Ακολουθούν μερικά συγκεκριμένα παραδείγματα:
- Ένας χρήστης έχει κάνει κλικ σε ένα κουμπί και πρέπει να εμφανιστεί ένα μενού.
- Μια ιστοσελίδα μόλις τελείωσε τη φόρτωση και μια διαδικασία θα πρέπει να εξαγάγει μερικές πληροφορίες από αυτήν τη φορτωμένη σελίδα.
- Ένας χρήστης μετακινείται μέσω μιας λίστας αντικειμένων (σε ένα κατάστημα εφαρμογών για παράδειγμα) και έχει φτάσει στο τέλος, έτσι ώστε να φορτωθούν περισσότερα αντικείμενα.
Το πρότυπο παρατηρητή χρησιμοποιείται παντού σε εφαρμογές GUI και συχνά οδηγεί σε κάποιο κωδικό boilerplate. Το QT δημιουργήθηκε με την ιδέα της αφαίρεσης αυτού του κώδικα boilerplate και της παροχής μιας ωραίας καθαρής σύνταξης. Ο μηχανισμός σήματος και υποδοχών το καθιστά δυνατό.
Σήματα και υποδοχές
Αντί να έχουν παρατηρήσιμα αντικείμενα και παρατηρητές και να τα καταγράφουν, η QT παρέχει δύο έννοιες υψηλού επιπέδου: σήματα και κουλοχέρηδες.
- ΕΝΑ σήμα είναι ένα μήνυμα που μπορεί να στείλει ένα αντικείμενο, συνήθως για να αναφέρει μια αλλαγή κατάστασης.
- ΕΝΑ θυρίδα είναι μια συνάρτηση που δέχεται και ανταποκρίνεται σε ένα σήμα.
Ακολουθούν μερικά παραδείγματα σημάτων και υποδοχών από την γνωστή τάξη Qpushbutton.
Όπως μπορείτε να δείτε, τα ονόματά τους είναι αρκετά σαφή. Αυτά τα σήματα αποστέλλονται όταν ο χρήστης κάνει κλικ (πατάει, στη συνέχεια κυκλοφορεί), πιέζει ή απελευθερώνει το κουμπί.
Εδώ είναι μερικές υποδοχές, από διαφορετικές τάξεις.
- Qapplication :: quit
- Qwidget :: setenabled
- Qpushbutton :: settext
Προκειμένου να ανταποκριθεί σε ένα σήμα, πρέπει να είναι μια υποδοχή συνδεδεμένος σε ένα σήμα. Το QT παρέχει τη μέθοδο Qobject ::συνδέω-συωδεομαι. Χρησιμοποιείται με αυτόν τον τρόπο, με τις δύο μακροεντολές ΣΗΜΑ και ΘΥΡΙΔΑ .
Fooobjecta *φουά = νέος Fooobjecta(); Fooobjectb *βόμβος = νέος Fooobjectb(); Quject::συνδέω-συωδεομαι(φουά, ΣΗΜΑ (φρικτός()), βόμβος, ΘΥΡΙΔΑ (στροβιλίζω());
Αυτό το παράδειγμα υποθέτει ότι το Fooobjecta έχει ένα σήμα με έντονο.
Πρέπει να γράψετε την υπογραφή του σήματος και την υποδοχή μέσα στις δύο μακροεντολές ΣΗΜΑ και ΘΥΡΙΔΑ. Εάν θέλετε περισσότερες πληροφορίες σχετικά με το τι κάνουν αυτές οι μακροεντολές, διαβάστε την τελευταία ενότητα αυτού του κεφαλαίου.
Παρατήρηση : Βασικά, τα σήματα και οι κουλοχέρηδες είναι μέθοδοι, που μπορεί ή δεν έχουν επιχειρήματα, αλλά ποτέ δεν επιστρέφουν τίποτα. Ενώ η έννοια ενός σήματος ως μέθοδος είναι ασυνήθιστη, μια υποδοχή είναι στην πραγματικότητα μια πραγματική μέθοδος και μπορεί να ονομαστεί ως συνήθως με άλλες μεθόδους ή ενώ ανταποκρίνεται σε ένα σήμα.
Πληροφορίες μετάδοσης
Τα σήματα και ο μηχανισμός υποδοχών είναι χρήσιμοι για να ανταποκριθούν στα κουμπιά κλικ, αλλά μπορεί να κάνει πολύ περισσότερα από αυτό. Για παράδειγμα, μπορεί επίσης να χρησιμοποιηθεί για την επικοινωνία πληροφοριών. Ας πούμε ότι παίζουμε ένα τραγούδι, απαιτείται μια μπάρα προόδου για να δείξουμε πόσος χρόνος παραμένει πριν τελειώσει το τραγούδι. Ένας παίκτης μέσων ενημέρωσης μπορεί να έχει μια τάξη που χρησιμοποιείται για να ελέγξει την πρόοδο των μέσων ενημέρωσης. Μια περίπτωση αυτής της τάξης μπορεί να στείλει περιοδικά ένα τσιμπούρι σήμα, με την τιμή προόδου. Αυτό το σήμα μπορεί να συνδεθεί σε ένα qprogressbar, που μπορεί να χρησιμοποιηθεί για την προβολή της προόδου.
Η υποθετική τάξη που χρησιμοποιείται για τον έλεγχο της προόδου μπορεί να έχει ένα σήμα που έχει αυτή την υπογραφή:
κενός MediaProgressManager::τσιμπούρι(int μιλαδές δευτερόλεπτο)
Και γνωρίζουμε από την τεκμηρίωση ότι το Qprogressbar έχει αυτή την υποδοχή:
κενός Ράβδος Qprogress::ρυθμιστήριο(int αξία)
Μπορείτε να δείτε ότι το σήμα και η υποδοχή έχουν το ίδιο είδος παραμέτρων, ειδικά ο τύπος. Εάν συνδέσετε ένα σήμα σε μια υποδοχή που δεν μοιράζεται το ίδιο είδος παραμέτρων, όταν ολοκληρωθεί η σύνδεση (κατά τον χρόνο εκτέλεσης), θα λάβετε μια προειδοποίηση όπως:
Quject::συνδέω-συωδεομαι: Ασύμβατες αποστολέας/δέκτης επιχειρήματα
Αυτό οφείλεται στο γεγονός ότι το σήμα μεταδίδει τις πληροφορίες στην υποδοχή χρησιμοποιώντας τις παραμέτρους. Η πρώτη παράμετρος του σήματος μεταβιβάζεται στην πρώτη από την υποδοχή και το ίδιο για δεύτερο, τρίτο και ούτω καθεξής.
Ο κωδικός για τη σύνδεση θα μοιάζει με αυτό:
MediaProgressManager *διευθυντής = νέος MediaProgressManager(); Ράβδος Qprogress *πρόοδος = νέος Ράβδος Qprogress(παράθυρο) Quject::συνδέω-συωδεομαι(διευθυντής, ΣΗΜΑ (τσιμπούρι(intΟυσία, πρόοδος, ΘΥΡΙΔΑ (ρυθμιστήριο(int))
Μπορείτε να δείτε ότι πρέπει να δώσετε μια υπογραφή μέσα στο ΣΗΜΑ και ΘΥΡΙΔΑ μακροεντολή, παρέχοντας τον τύπο των τιμών που περνούν μέσω των σημάτων. Μπορείτε επίσης να δώσετε το όνομα της μεταβλητής εάν θέλετε. (Είναι πραγματικά ακόμα καλύτερο).
Χαρακτηριστικά σημάτων και υποδοχών
- Ένα σήμα μπορεί να συνδεθεί σε διάφορες υποδοχές
- Πολλά σήματα μπορούν να συνδεθούν με υποδοχή
- Ένα σήμα μπορεί να συνδεθεί σε ένα σήμα: είναι η αναμετάδοση σήματος. Το δεύτερο σήμα αποστέλλεται εάν αποσταλεί το πρώτο σήμα.
Παραδείγματα
Απαντώντας σε μια εκδήλωση
Θυμηθείτε την εφαρμογή κουμπιού μας? Ας προσπαθήσουμε πραγματικά να φτιάξουμε κάτι με αυτήν την εφαρμογή, όπως να το κλείσουμε κάνοντας κλικ στο κουμπί. Γνωρίζουμε ήδη ότι το Qpushbutton παρέχει το κλικ σήμα. Πρέπει επίσης να γνωρίζουμε ότι η Qapplication παρέχει το εγκαταλείπω υποδοχή, που κλείνει την εφαρμογή.
Για να κάνετε ένα κλικ σε ένα κουμπί Κλείστε την εφαρμογή, πρέπει να συνδέσουμε το σήμα κλικ εκπέμπεται από το κουμπί στο εγκαταλείπω υποδοχή αυτής της παράστασης qapplication. Μπορούμε να τροποποιήσουμε τον κώδικα από την προηγούμενη ενότητα για να το κάνουμε αυτό, αλλά πριν το κάνουμε αυτό, ίσως να αναρωτιέστε πώς να αποκτήσετε πρόσβαση στην παρουσία Qapplication ενώ βρίσκεστε σε άλλη τάξη. Στην πραγματικότητα, είναι αρκετά απλό, αφού υπάρχει μια στατική λειτουργία στο Qapplication, με την ακόλουθη υπογραφή, που χρησιμοποιείται για να το πάρει:
Qapplication * Qapplication::παράδειγμα()
Αυτό οδηγεί στην ακόλουθη τροποποίηση του προηγούμενου κώδικα μας:
#περιλαμβάνω "παράθυρο.Η " #περιλαμβάνω #περιλαμβάνω Παράθυρο::Παράθυρο(Qwidget *μητρική εταιρεία· : Qwidget(μητρική εταιρεία· // Ρύθμιση μεγέθους του παραθύρου setFixedSize(100, 50) // Δημιουργία και τοποθετήστε το κουμπί m_button = νέος Qpushbutton("Γειά σου Κόσμε", Αυτό) m_button->ορυχετρία(10, 10, 80, 30) // νέα: Κάντε τη σύνδεση συνδέω-συωδεομαι(m_button, ΣΗΜΑ (κλικ()), Qapplication::παράδειγμα(), ΘΥΡΙΔΑ (εγκαταλείπω()); >
Όταν το κουμπί μέσα στο παράθυρο έχει κλικ, η εφαρμογή θα σταματήσει.
Μετάδοση πληροφοριών με σήματα και κουλοχέρηδες
Ακολουθεί ένα απλούστερο παράδειγμα για τη μετάδοση πληροφοριών. Εμφανίζει μόνο μια γραμμή προόδου και ένα ρυθμιστικό (που δημιουργήθηκε από το QSLider) μέσα σε ένα παράθυρο και ενώ το ρυθμιστικό μετακινείται, η τιμή της γραμμής προόδου συγχρονίζεται με μια πολύ απλή σύνδεση.
Τα ενδιαφέροντα σήματα και οι υποδοχές είναι:
κενός Qslider::αξιοπρεπής(int αξία) κενός Ράβδος Qprogress::ρυθμιστήριο(int αξία)
Το QSLider εκπέμπει αυτόματα το σήμα που χρησιμοποιείται με τη νέα τιμή που πέρασε ως παράμετρο όταν αλλάζει η τιμή και χρησιμοποιείται η μέθοδος ρύθμισης της Qprogressbar, όπως είδαμε, για να ρυθμίσετε την τιμή της γραμμής προόδου.
Αυτό οδηγεί στον ακόλουθο κωδικό:
#περιλαμβάνω #περιλαμβάνω #περιλαμβάνω int κύριος(int argc, απανθρακώνω **argv· Qapplication εφαρμογή (argc, argv) // Δημιουργήστε ένα παράθυρο δοχείου Qwidget παράθυρο; παράθυρο.setFixedSize(200, 80) // Δημιουργήστε μια γραμμή προόδου // με το εύρος μεταξύ 0 και 100, και μια τιμή εκκίνησης 0 Ράβδος Qprogress *γραμμή προόδου = νέος Ράβδος Qprogress(&παράθυρο) γραμμή προόδου->ρυθμίζω(0, 100) γραμμή προόδου->ρυθμιστήριο(0) γραμμή προόδου->ορυχετρία(10, 10, 180, 30) // Δημιουργήστε ένα οριζόντιο ρυθμιστικό // με το εύρος μεταξύ 0 και 100, και μια τιμή εκκίνησης 0 Qslider *ολισθητής = νέος Qslider(&παράθυρο) ολισθητής->τελετουργία(ΕΤ::Οριζόντιος) ολισθητής->ρυθμίζω(0, 100) ολισθητής->ρυθμιστήριο(0) ολισθητής->ορυχετρία(10, 40, 180, 30) παράθυρο.προβολή(); // σύνδεση // Αυτή η σύνδεση ρυθμίστε την τιμή της γραμμής προόδου // Ενώ αλλάζει η τιμή του ολισθητήρα Quject::συνδέω-συωδεομαι(ολισθητής, ΣΗΜΑ (αξιοπρεπής(intΟυσία, γραμμή προόδου, ΘΥΡΙΔΑ (ρυθμιστήριο(int)) ΕΠΙΣΤΡΟΦΗ εφαρμογή.εκτέλεση(); >
Τεχνική πτυχή
Αυτή η ενότητα μπορεί να παραλειφθεί για τώρα, αν θέλετε μόνο να προγραμματίσετε με QT. Απλά ξέρετε ότι πρέπει να βάλετε ΣΗΜΑ και ΘΥΡΙΔΑ γύρω από τα σήματα και τις υποδοχές κατά την κλήση του Connect . Εάν θέλετε να μάθετε πώς λειτουργεί το QT, είναι καλύτερο να το διαβάσετε.
Το αντικείμενο meta
Το QT παρέχει ένα μετα-αντικειμένου Σύστημα. Το Meta-Object (κυριολεκτικά “πάνω από το αντικείμενο”) είναι ένας τρόπος για να επιτευχθούν ορισμένα παραδείγματα προγραμματισμού που είναι συνήθως αδύνατο να επιτευχθούν με καθαρό C ++ όπως:
- Ενδοσκόπηση : ικανότητα εξέτασης ενός τύπου κατά τη διάρκεια του χρόνου εκτέλεσης
- Κλήσεις ασύγχρονης λειτουργίας
Για να χρησιμοποιήσετε τέτοιες δυνατότητες μετα-αντικειμένου σε μια εφαρμογή, μπορεί κανείς να υποκαταστήσει το QObject και να το επισημάνει έτσι ώστε ο μεταγλωττιστής μετα-αντικειμένου (MOC) να μπορεί να ερμηνεύσει και να το μεταφράσει.
Ο κώδικας που παράγεται από το MOC περιλαμβάνει σήματα και υπογραφές υποδοχών, μεθόδους που χρησιμοποιούνται για την ανάκτηση μετα-πληροφοριών από αυτές τις επισημασμένες κατηγορίες, χειρισμό ιδιοτήτων. Όλες αυτές οι πληροφορίες μπορούν να έχουν πρόσβαση χρησιμοποιώντας την ακόλουθη μέθοδο:
κονσερβός Qmetaobject * Quject::μεταβατικό () κονσερβός
Η κλάση QmetaObject περιέχει όλες τις μεθόδους που ασχολούνται με τα μετα-αντικείμενα.
Σημαντικές μακροεντολές
Η πιο σημαντική μακροεντολή είναι Q_object. Οι συνδέσεις σημάτων και η σύνταξή τους δεν μπορούν να ερμηνευθούν από έναν κανονικό μεταγλωττιστή C ++. Το MOC παρέχεται για να μεταφράσει τη σύνταξη QT όπως “Connect”, “Signals”, “Slots”, κλπ σε κανονική σύνταξη C ++. Αυτό γίνεται με τον καθορισμό του Q_object μακροεντολή στην κεφαλίδα που περιέχει ορισμούς κλάσης που χρησιμοποιούν τέτοια σύνταξη.
τάξη Mywidget : δημόσιο Qwidget Q_object δημόσιο: Mywidget(Qwidget *μητρική εταιρεία = 0) >
Άλλες μακροεντολές δείκτη για MOC είναι
- σήματα
- δημόσιο / προστατευμένο / ιδιωτικό κουλοχέρηδες
που σηματοδοτούν τις διαφορετικές μεθόδους που πρέπει να επεκταθούν.
ΣΗΜΑ και ΘΥΡΙΔΑ είναι επίσης δύο πολύ σημαντικές και χρήσιμες μακροεντολές. Όταν εκπέμπεται ένα σήμα, το μετα-αντικείμενο σύστημα χρησιμοποιείται για να συγκρίνει την υπογραφή του σήματος, να ελέγξει τη σύνδεση και να βρει την υποδοχή χρησιμοποιώντας την υπογραφή του. Αυτές οι μακροεντολές χρησιμοποιούνται στην πραγματικότητα για να μετατρέψουν την παρεχόμενη υπογραφή της μεθόδου σε μια συμβολοσειρά που ταιριάζει με αυτό που αποθηκεύεται στο μετα-αντικείμενο.
Δημιουργία προσαρμοσμένων σημάτων και υποδοχών
Αυτό το κεφάλαιο καλύπτει το δεύτερο μέρος των σημάτων και των υποδοχών: Εφαρμογή προσαρμοσμένων σημάτων και υποδοχών.
Η δημιουργία προσαρμοσμένων υποδοχών και σημάτων είναι πραγματικά απλή. Οι υποδοχές είναι σαν κανονικές μεθόδους, αλλά με μικρές διακοσμήσεις γύρω, ενώ τα σήματα χρειάζονται ελάχιστη εφαρμογή καθόλου.
Η δημιουργία προσαρμοσμένων σημάτων και υποδοχών είναι πολύ απλή. Περιγράφεται από τον ακόλουθο κατάλογο ελέγχου:
- Προσθήκη Q_object μακροεντολή
- Προσθήκη σήματα Τμήμα και γράψτε πρωτότυπα σημάτων
- Προσθήκη δημόσια κουλοχέρη ή Προστατευόμενες υποδοχές ή ιδιωτικές υποδοχές τμήματα και γράψτε πρωτότυπα slots
- Εφαρμόστε τις υποδοχές ως κανονικές μεθόδους
- Δημιουργία συνδέσεων
Δημιουργία προσαρμοσμένων υποδοχών
Προκειμένου να εφαρμόσουμε μια υποδοχή, πρέπει πρώτα να κάνουμε την τάξη να μπορεί να στείλει σήματα και να έχει υποδοχές (δείτε το προηγούμενο κεφάλαιο). Αυτό γίνεται με τη ρύθμιση του Q_object μακροεντολή στη δήλωση της τάξης (συχνά στην κεφαλίδα).
Μετά από αυτό, μια υποδοχή πρέπει να δηλωθεί στο αντίστοιχο τμήμα και να εφαρμοστεί ως κανονική μέθοδος.
Τέλος, οι υποδοχές συνδέονται με σήματα.
Δημιουργία σημάτων
Όσον αφορά τις υποδοχές, πρέπει πρώτα να προσθέσουμε το Q_object μακροεντολή.
Τα σήματα πρέπει επίσης να δηλωθούν στο σήματα Τμήμα, και δεν χρειάζεται να εφαρμοστούν.
Εκπληρώσονται χρησιμοποιώντας το εκπέμπουν Λέξη -κλειδί:
εκπέμπουν mysignal();
Σημειώστε ότι για να στείλετε σήματα που έχουν παραμέτρους, πρέπει να τα περάσετε στην εκπομπή σήματος:
εκπέμπουν mysignal(Πρώτο παραμέτρου, δευτερόλεπτο …)
Παράδειγμα
Δημιουργία προσαρμοσμένων υποδοχών
Ας ξεκινήσουμε με το παράθυρό μας με το κουμπί:
#ifndef Window_h #define window_h #περιλαμβάνω τάξη Qpushbutton; τάξη Παράθυρο : δημόσιο Qwidget δημόσιο: σαφής Παράθυρο(Qwidget *μητρική εταιρεία = 0) ιδιωτικός: Qpushbutton *m_button; >; #τέλος εαν // window_h
#περιλαμβάνω "παράθυρο.Η " #περιλαμβάνω Παράθυρο::Παράθυρο(Qwidget *μητρική εταιρεία· : Qwidget(μητρική εταιρεία· // Ρύθμιση μεγέθους του παραθύρου setFixedSize(100, 50) // Δημιουργία και τοποθετήστε το κουμπί m_button = νέος Qpushbutton("Γειά σου Κόσμε", Αυτό) m_button->ορυχετρία(10, 10, 80, 30) >
Μπορεί να θέλουμε να καταργήσουμε την προηγούμενη σύνδεσή μας που κάνει την εφαρμογή να σταματήσει ενώ κάνοντας κλικ στο κουμπί. Τώρα, το θέλουμε, όταν κάνετε κλικ στο κουμπί, το κείμενο έχει αλλάξει. Πιο συγκεκριμένα, θέλουμε να είναι το κουμπί τετραγωνισμένος, Και αυτό, όταν ελέγχεται, εμφανίζει “ελεγχόμενο”, και όταν δεν ελέγχεται, αποκαθιστά “Hello World”.
Το Qpushbutton δεν εφαρμόζει μια τέτοια συγκεκριμένη υποδοχή, οπότε πρέπει να το εφαρμόσουμε μόνοι μας. Όπως αναφέρθηκε προηγουμένως, πρέπει να προσθέσουμε το Q_object μακροεντολή.
τάξη Παράθυρο : δημόσιο Qwidget Q_object δημόσιο: σαφής Παράθυρο(Qwidget *μητρική εταιρεία = 0) ιδιωτικός: Qpushbutton *m_button; >;
Προσθέτουμε επίσης την προσαρμοσμένη υποδοχή μας. Δεδομένου ότι προσπαθούμε να αντιδράσουμε από το κουμπί που ελέγχεται και δεδομένου ότι το αντίστοιχο σήμα είναι
κενός Qpushbutton::κλικ(φουσκωτό τετραγωνισμένος·
Μπορούμε να εφαρμόσουμε μια υποδοχή που έχει αυτήν την υπογραφή:
κενός Παράθυρο::κουλοχέρη(φουσκωτό τετραγωνισμένος)
Τις περισσότερες φορές, κατά σύμβαση, εφαρμόζουμε ιδιωτικές και προστατευμένες υποδοχές με την προθέση τους με “υποδοχή”. Εδώ, δεν μας ενδιαφέρει να εκθέσουμε αυτήν την υποδοχή ως δημόσια λειτουργία, μπορούμε να το κάνουμε ιδιωτικό. Η νέα κεφαλίδα είναι τότε
#ifndef Window_h #define window_h #περιλαμβάνω τάξη Qpushbutton; τάξη Παράθυρο : δημόσιο Qwidget Q_object δημόσιο: σαφής Παράθυρο(Qwidget *μητρική εταιρεία = 0) ιδιωτικός κουλοχέρηδες: κενός κουλοχέρη(φουσκωτό τετραγωνισμένος) ιδιωτικός: Qpushbutton *m_button; >; #τέλος εαν // window_h
Η εφαρμογή αυτής της υποδοχής είναι
κενός Παράθυρο::κουλοχέρη(φουσκωτό τετραγωνισμένος· αν (τετραγωνισμένος· m_button->ντετέκτιβ("Τετραγωνισμένος") > αλλού m_button->ντετέκτιβ("Γειά σου Κόσμε") > >
Πρέπει να κάνουμε το κουμπί και να καθορίσουμε τη σύνδεση, πρέπει να προσθέσουμε αυτόν τον κώδικα στον κατασκευαστή:
m_button->σερβίρισμα(αληθής) συνδέω-συωδεομαι(m_button, ΣΗΜΑ (κλικ(φουσκωτόΟυσία, Αυτό, ΘΥΡΙΔΑ (κουλοχέρη(φουσκωτό))
Ο κωδικός που προκύπτει είναι τότε:
#περιλαμβάνω "παράθυρο.Η " #περιλαμβάνω Παράθυρο::Παράθυρο(Qwidget *μητρική εταιρεία· : Qwidget(μητρική εταιρεία· // Ρύθμιση μεγέθους του παραθύρου setFixedSize(100, 50) // Δημιουργία και τοποθετήστε το κουμπί m_button = νέος Qpushbutton("Γειά σου Κόσμε", Αυτό) m_button->ορυχετρία(10, 10, 80, 30) m_button->σερβίρισμα(αληθής) συνδέω-συωδεομαι(m_button, ΣΗΜΑ (κλικ(φουσκωτόΟυσία, Αυτό, ΘΥΡΙΔΑ (κουλοχέρη(φουσκωτό)) > κενός Παράθυρο::κουλοχέρη(φουσκωτό τετραγωνισμένος· αν (τετραγωνισμένος· m_button->ντετέκτιβ("Τετραγωνισμένος") > αλλού m_button->ντετέκτιβ("Γειά σου Κόσμε") > >
Εκπέμποντας προσαρμοσμένα σήματα
Με βάση το προηγούμενο παράδειγμα, θέλουμε να κλείσουμε την εφαρμογή εάν το κουμπί είναι κλικ (επιλεγμένο ή ανεξέλεγκτο) 10 φορές. Πρώτα πρέπει να εφαρμόσουμε έναν μετρητή που θα μετρήσει τον αριθμό των κλικ. Αυτές οι τροποποιήσεις το εφαρμόζουν:
τάξη Παράθυρο : δημόσιο Qwidget Q_object δημόσιο: σαφής Παράθυρο(Qwidget *μητρική εταιρεία = 0) ιδιωτικός κουλοχέρηδες: κενός κουλοχέρη(φουσκωτό τετραγωνισμένος) ιδιωτικός: int m_counter; Qpushbutton *m_button; >;
Παράθυρο::Παράθυρο(Qwidget *μητρική εταιρεία· : Qwidget(μητρική εταιρεία· // Ρύθμιση μεγέθους του παραθύρου setFixedSize(100, 50) // Δημιουργία και τοποθετήστε το κουμπί m_button = νέος Qpushbutton("Γειά σου Κόσμε", Αυτό) m_button->ορυχετρία(10, 10, 80, 30) m_button->σερβίρισμα(αληθής) m_counter = 0; συνδέω-συωδεομαι(m_button, ΣΗΜΑ (κλικ(φουσκωτόΟυσία, Αυτό, ΘΥΡΙΔΑ (κουλοχέρη(φουσκωτό)) > κενός Παράθυρο::κουλοχέρη(φουσκωτό τετραγωνισμένος· αν (τετραγωνισμένος· m_button->ντετέκτιβ("Τετραγωνισμένος") > αλλού m_button->ντετέκτιβ("Γειά σου Κόσμε") > m_counter ++; >
Τώρα, πρέπει να δημιουργήσουμε ένα προσαρμοσμένο σήμα που χρησιμοποιείται για την ειδοποίηση άλλων στοιχείων, ότι ο μετρητής έχει φτάσει τα 10. Προκειμένου να δηλώσουμε ένα σήμα, πρέπει να προσθέσουμε ένα
σήματα
Τμήμα στην κεφαλίδα. Μπορούμε επίσης να δηλώσουμε ένα σήμα με την ακόλουθη υπογραφή:
κενός Παράθυρο::αντεπιστημονημένος()
Στη συνέχεια, η κατηγορία κεφαλίδας δηλώνεται ότι ακολουθείται:
τάξη Παράθυρο : δημόσιο Qwidget Q_object δημόσιο: σαφής Παράθυρο(Qwidget *μητρική εταιρεία = 0) σήματα: κενός αντεπιστημονημένος(); ιδιωτικός κουλοχέρηδες: κενός κουλοχέρη(φουσκωτό τετραγωνισμένος) ιδιωτικός: int m_counter; Qpushbutton *m_button; >;
Ακόμη και αν το σήμα δηλώνεται ως μέθοδος, δεν χρειάζεται να το εφαρμόσετε. Ο μεταγλωττιστής μετα-αντικειμένου χρησιμοποιείται για να το κάνει αυτό.
Τώρα πρέπει να εκπέμπουμε το σήμα όταν ο μετρητής φτάσει τα 10. Γίνεται απλά στην υποδοχή:
κενός Παράθυρο::κουλοχέρη(φουσκωτό τετραγωνισμένος· αν (τετραγωνισμένος· m_button->ντετέκτιβ("Τετραγωνισμένος") > αλλού m_button->ντετέκτιβ("Γειά σου Κόσμε") > m_counter ++; αν (m_counter == 10· εκπέμπουν αντεπιστημονημένος(); > >
Πρέπει να γράψουμε τη λέξη -κλειδί εκπέμπουν Για να στείλετε το σήμα.
Η σύνδεση του πρόσφατα δημιουργημένου σήματος με την υποδοχή τερματισμού γίνεται ως συνήθως:
συνδέω-συωδεομαι(Αυτό, ΣΗΜΑ (αντεπιστημονημένος()), Qapplication::παράδειγμα(), ΘΥΡΙΔΑ (εγκαταλείπω());
Ο τελικός κωδικός είναι:
#ifndef Window_h #define window_h #περιλαμβάνω τάξη Qpushbutton; τάξη Παράθυρο : δημόσιο Qwidget Q_object δημόσιο: σαφής Παράθυρο(Qwidget *μητρική εταιρεία = 0) σήματα: κενός αντεπιστημονημένος(); ιδιωτικός κουλοχέρηδες: κενός κουλοχέρη(φουσκωτό τετραγωνισμένος) ιδιωτικός: int m_counter; Qpushbutton *m_button; >; #τέλος εαν // window_h
#περιλαμβάνω "παράθυρο.Η " #περιλαμβάνω #περιλαμβάνω Παράθυρο::Παράθυρο(Qwidget *μητρική εταιρεία· : Qwidget(μητρική εταιρεία· // Ρύθμιση μεγέθους του παραθύρου setFixedSize(100, 50) // Δημιουργία και τοποθετήστε το κουμπί m_button = νέος Qpushbutton("Γειά σου Κόσμε", Αυτό) m_button->ορυχετρία(10, 10, 80, 30) m_button->σερβίρισμα(αληθής) m_counter = 0; συνδέω-συωδεομαι(m_button, ΣΗΜΑ (κλικ(φουσκωτόΟυσία, Αυτό, ΘΥΡΙΔΑ (κουλοχέρη(φουσκωτό)) συνδέω-συωδεομαι(Αυτό, ΣΗΜΑ (αντεπιστημονημένος()), Qapplication::παράδειγμα(), ΘΥΡΙΔΑ (εγκαταλείπω()); > κενός Παράθυρο::κουλοχέρη(φουσκωτό τετραγωνισμένος· αν (τετραγωνισμένος· m_button->ντετέκτιβ("Τετραγωνισμένος") > αλλού m_button->ντετέκτιβ("Γειά σου Κόσμε") > m_counter ++; αν (m_counter == 10· εκπέμπουν αντεπιστημονημένος(); > >
Και μπορείτε να δοκιμάσετε και να το ελέγξετε αφού κάνετε κλικ στο κουμπί δέκα φορές, η εφαρμογή θα σταματήσει.
Αντιμετώπιση προβλημάτων
Κατά τη σύνταξη του προγράμματος σας, ειδικά όταν προσθέτετε το Macro Q_Object, μπορεί να έχετε αυτό το σφάλμα συλλογής.
κύριος.CPP:(.κείμενο._Zn6windowd2ev[_Zn6windowd5ev]+0x3·: απροσδιόριστος αναφορά προς την «ευσπλαχνικός Για Παράθυρο"
Αυτό συμβαίνει λόγω του μεταγλωττιστή μετα-αντικειμένου που δεν τρέχει σε μια τάξη που θα έπρεπε να έχει μετα-αντικείμενο. Θα έπρεπε επανάληψη του qmake, κάνοντας build> run qmake.
Widgets
Το κουμπί επιλογής είναι ένα τυπικό στοιχείο GUI. Χρησιμοποιείται συχνά για να κάνει μια μοναδική επιλογή από μια λίστα. Στο QT, το Qradiobutton χρησιμοποιείται για τη δημιουργία κουμπιών ραδιοφώνου.
Χάρη σε μια ωραία κληρονομιά, ένα Qradiobutton συμπεριφέρεται ακριβώς όπως ένα qpushbutton. Όλες οι ιδιότητες του qpushbutton είναι επίσης οι ίδιες στο Qradiobutton και όλα όσα έμαθαν στο δεύτερο κεφάλαιο μπορούν να επαναχρησιμοποιηθούν εδώ.
Από προεπιλογή, τα qradiobuttons δεν είναι ομαδοποιημένα, τόσα πολλά από αυτά μπορούν να ελεγχθούν ταυτόχρονα. Προκειμένου να έχουμε την “αποκλειστική” συμπεριφορά πολλών κουμπιών, πρέπει να χρησιμοποιήσουμε το qbuttongroup . Αυτή η κλάση μπορεί να χρησιμοποιηθεί ως εξής: Διαθέτουμε μια νέα ομάδα κουμπιών και την επισυνάψουμε στο γονικό αντικείμενο. Σημειώστε ότι το γονικό αντικείμενο μπορεί να είναι το mainwindow, ή “αυτό”:
Qbuttongroup *ακανόνιστη ομάδα = νέος Qbuttongroup(αντικείμενο) // Προσθήκη κουμπιών στην ομάδα κουμπιών ακανόνιστη ομάδα->addbutton(κουμπί1) ακανόνιστη ομάδα->addbutton(κουμπί2) ακανόνιστη ομάδα->addbutton(κουμπί3) .
Αυτό που θέλουμε είναι να δημιουργήσουμε ένα picker μενού. Σε ένα παράθυρο, θα πρέπει να εμφανίζεται μια λίστα με νόστιμες πλάκες με κουμπιά και ένα κουμπί ώθησης που χρησιμοποιείται για την επιλογή της επιλεγμένης πλάκας θα πρέπει να εμφανίζεται.
Προφανώς, τίποτα δεν θα συμβεί (τώρα) όταν τα κουμπιά έχουν κλικ.
Σήματα και υποδοχές
Ακολουθεί ένα παράδειγμα σχετικά με τα σήματα και τις υποδοχές. Θα γράψουμε μια εφαρμογή με δύο κουμπιά. Το πρώτο κουμπί θα πρέπει να εμφανίζει πληροφορίες σχετικά με το qt.
Σας παρέχουμε τον ακόλουθο κωδικό για να ολοκληρώσετε:
#περιλαμβάνω #περιλαμβάνω int κύριος(int argc, απανθρακώνω **argv· Qapplication εφαρμογή (argc, argv) Qwidget παράθυρο; παράθυρο.setFixedSize(100, 80) Qpushbutton *buttonInfo = νέος Qpushbutton("Πληροφορίες", &παράθυρο) buttonInfo->ορυχετρία(10, 10, 80, 30) Qpushbutton *κουμπιά = νέος Qpushbutton("Εγκαταλείπω", &παράθυρο) κουμπιά->ορυχετρία(10, 40, 80, 30) παράθυρο.προβολή(); // Προσθέστε τον κωδικό σας εδώ ΕΠΙΣΤΡΟΦΗ εφαρμογή.εκτέλεση(); >
Για να εμφανίσετε τις πληροφορίες σχετικά με το QT, θα πρέπει να χρησιμοποιήσετε την ακόλουθη μέθοδο
κενός Qapplication::Σχετικά με();
Μπορείτε επίσης να προσθέσετε εικονίδια στα κουμπιά ή να τα αλλάξετε το μέγεθος. Προφανώς, το κουμπί “quit” πρέπει να είναι πιο σημαντικό, οπότε γιατί να μην το κάνετε μεγαλύτερο?
Αλλά σας συνιστούμε πραγματικά να προσπαθήσετε να το καταλάβετε από μόνοι σας πώς να λύσετε αυτές τις ασκήσεις.
QT για αρχάριους – Εύρεση πληροφοριών στην τεκμηρίωση
Η τεκμηρίωση QT είναι μια πολύτιμη πληροφορία. Είναι το μέρος για να βρείτε τα παντα σχετίζεται με το qt. Αλλά, η τεκμηρίωση QT δεν είναι ένα σεμινάριο για το πώς να χρησιμοποιήσετε το QT. Είναι μια συλλογή από όλες τις πληροφορίες που σχετίζονται με τις τάξεις, καθώς και μερικά παραδείγματα. Ο στόχος αυτού του κεφαλαίου είναι να σας εισαγάγει στην τεκμηρίωση ως βάση για προγραμματισμό με QT.
Πού να βρείτε την τεκμηρίωση
Η καλύτερη πηγή τεκμηρίωσης είναι στο Διαδίκτυο, σε αυτό το δίκτυο προγραμματιστών:
Παρέχει το πλήρες έγγραφο, καθώς και μερικά docnotes, που μπορούν να προσθέσουν οι χρήστες. Αυτά τα docnotes δίνουν περισσότερα παραδείγματα και τονίζουν μερικά δύσκολα σημεία. Η ηλεκτρονική τεκμηρίωση διαθέτει επίσης μια αρκετά ισχυρή μηχανή αναζήτησης και περιέχει επίσης όλη την τεκμηρίωση για όλες τις εκδόσεις του QT.
Ενώ η ηλεκτρονική έκδοση απαιτεί σύνδεση στο Διαδίκτυο, τα docnotes είναι ακόμα διαθέσιμα. Εάν το QTSDK εγκαταστάθηκε σωστά, η τεκμηρίωση που ταιριάζει με την τρέχουσα έκδοση του QT θα έπρεπε να έχει εγκατασταθεί και το Βοήθεια Το τμήμα του qtcreator δεν πρέπει να είναι άδειο. Μπορείτε επίσης να χρησιμοποιήσετε Βοηθός QT, αυτό είναι ένα αυτόνομο πρόγραμμα περιήγησης DOC.
Σημαντικά τμήματα της τεκμηρίωσης
Εάν εκτελείτε το πρόγραμμα προβολής τεκμηρίωσης εκτός σύνδεσης, είτε σε Creator QT είτε σε βοηθό QT, θα βρείτε στην περίληψη ότι υπάρχουν τεκμηρίωση για διαφορετικά στοιχεία του QT SDK.
- QT Βοηθός τεκμηρίωση
- Τεκμηρίωση του σχεδιαστή QT
- QT γλωσσολογική τεκμηρίωση
- Τεκμηρίωση QMake
- Τεκμηρίωση αναφοράς QT
Το πιο σημαντικό στοιχείο είναι, φυσικά, η τεκμηρίωση αναφοράς QT.
Η τεκμηρίωση QT παρέχει μια ωραία εισαγωγή πολλών εξαρτημάτων, καθώς και την τεκμηρίωση για όλες τις τάξεις στο QT. Αυτή η λίστα παρατίθεται στη σελίδα όλες τις κατηγορίες. Μια άλλη ενδιαφέρουσα σελίδα είναι η σελίδα που παραθέτει όλες τις ενότητες. Αυτή η σελίδα παρέχει πληροφορίες σχετικά με τα διάφορα στοιχεία στο QT.
Σε αυτό το σεμινάριο, θα χρησιμοποιήσουμε ως επί το πλείστον αυτές τις ενότητες
Η λειτουργία αναζήτησης είναι επίσης πολύ σημαντική. Αν γνωρίζετε την κλάση που θα χρησιμοποιήσετε και θέλετε να βρείτε την τεκμηρίωση, μπορείτε είτε να πληκτρολογήσετε το όνομα αυτής της κλάσης στο πεδίο αναζήτησης (online) είτε στο φίλτρο του ευρετηρίου (offline). Μπορείτε επίσης να αναζητήσετε μεθόδους και απαριθμήσεις σε αυτά τα πεδία.
Περιηγηθείτε στην τεκμηρίωση μιας τάξης
Η τεκμηρίωση των τάξεων είναι πάντα οργανωμένη με τον ίδιο τρόπο:
- Όνομα και σύντομη περιγραφή της τάξης
- Κληρονομία
- Απαριθμήσεις
- Ιδιότητες
- Δημόσιες μέθοδοι
- Δημόσια κουλοχέρη
- Σήματα
- Προστατευμένες μεθόδους
Ας πάρουμε το qtextedit class ως παράδειγμα.
Έχει Qt μια διασύνδεση C?
Βρήκα αντικρουόμενες απαντήσεις στον ιστό – μερικοί λένε ότι το κάνουν, μερικοί λένε ότι δεν το κάνει. Δεν μπόρεσα να βρω οποιαδήποτε λεπτομέρειες στην επίσημη τεκμηρίωση QT. Το ίδιο συμβαίνει και με το QT ή όχι?
ρώτησε 13 Νοεμβρίου 2009 στις 10:53
6,041 11 11 Χρυσά κονκάρδες 48 48 ασημένια κονκάρδες 50 50 χάλκινα κονκάρδες
7 απαντήσεις 7
Σύντομη απάντηση: Όχι.
Εάν χρειάζεστε ένα ολοκληρωμένο εργαλείο GUI για το C, μπορείτε να χρησιμοποιήσετε το GTK+.
Για να χρησιμοποιήσετε το QT, εσείς πρέπει Έχετε έναν μεταγλωττιστή C ++. Αλλά αυτό δεν σημαίνει ότι η “λογική εφαρμογής” σας δεν μπορεί να γραφτεί στο C, που συντάχθηκε με έναν μεταγλωττιστή C και συνδεδεμένο προσεκτικά με το τμήμα C ++ (το GUI με QT). Αυτή η λογική της εφαρμογής μπορεί να είναι γενική, συνδετική σε άλλα εκτελέσιμα (Pure-C, μικτή C/C ++, κλπ.) Όλα εξαρτώνται από το τι χρειάζεστε.
Το QT είναι ιδανικό για το C ++, όμως, και είναι ένας καλός λόγος να αποφασίσετε να χρησιμοποιήσετε το C ++ για ένα συγκεκριμένο έργο, ακόμη και αν θέλετε να κρατήσετε τα μέρη στο C.