Apakah QT menggunakan C ++
Kerangka kerja QT
QT Essentials Tentukan fondasi QT di semua platform. Mereka tersedia di semua platform pengembangan yang didukung dan di platform target yang diuji.
Ringkasan:
1. Kerangka kerja QT adalah set komprehensif kelas perpustakaan C ++ yang menyederhanakan pengembangan aplikasi.
2. QT menghasilkan kode yang sangat mudah dibaca, dapat dipelihara, dan dapat digunakan kembali dengan kinerja runtime yang tinggi dan jejak kecil.
3. QT adalah cross-platform, memungkinkan pengembang untuk membuat aplikasi untuk beberapa platform.
4. Esensi QT, seperti QT Core, QT GUI, QT Multimedia, Jaringan QT, QT Quick, dan QT SQL, membentuk fondasi QT di semua platform.
5. QT juga menyediakan add-on seperti QT OpenGL, QT Wayland Compositor, Sensor QT, QT Webview, Qt Safe Renderer, dan QT SCXML untuk tugas tertentu.
6. Kerangka kerja QT memprioritaskan mengatasi potensi ancaman kerentanan dan masalah keamanan.
7. Pengembang harus memiliki pengetahuan sebelumnya tentang C ++ sebelum menggunakan QT.
8. Seri Tutorial QT mencakup topik -topik seperti pengingat C ++, pengantar fitur QT, QT Creator, membuat jendela dan tombol, hierarki kelas QT, dan banyak lagi.
9. Pola pengamat, sinyal dan slot, dan informasi transmisi adalah beberapa fitur canggih yang tercakup dalam seri tutorial.
Pertanyaan:
- Apakah qt menggunakan c++?
Ya, QT terutama ditulis dalam C ++ dan menyediakan satu set kelas perpustakaan C ++ untuk pengembangan aplikasi. - Apa itu Essentials Qt?
Esensi QT adalah fondasi QT dan termasuk modul seperti QT Core, QT GUI, QT Multimedia, QT Network, QT Quick, dan QT SQL. - Apa saja add-on QT?
Beberapa add-on QT termasuk QT OpenGL, QT Wayland Compositor, Sensor QT, QT Webview, QT Safe Renderer, dan QT SCXML. - Bagaimana QT memprioritaskan keamanan?
Grup QT secara aktif membahas potensi kerentanan dan masalah keamanan dan mengikuti kebijakan keamanan yang diuraikan dalam Kebijakan Keamanan Proyek QT. - Pengetahuan apa yang dibutuhkan untuk menggunakan QT?
Pengembang harus memiliki pengetahuan tentang C ++ sebelum memulai dengan QT. - Topik apa yang dibahas dalam seri tutorial QT?
Seri tutorial mencakup topik seperti pengingat C ++, pengantar fitur QT, QT Creator, membuat jendela dan tombol, hierarki kelas QT, dan banyak lagi. - Fitur canggih apa yang dibahas dalam seri tutorial?
Seri tutorial mencakup fitur -fitur canggih seperti pola pengamat, sinyal dan slot, dan informasi transmisi. - Adalah qt cross-platform?
Ya, QT adalah cross-platform dan memungkinkan pengembang untuk membuat aplikasi yang berjalan di beberapa platform. - Apa tujuan qt esensial dan add-ons qt?
QT Essential memberikan dasar QT, sedangkan add-on QT menawarkan fungsi tambahan untuk tugas-tugas tertentu. - Bagaimana QT memastikan keamanan?
QT secara aktif menganalisis laporan kerentanan dan mengambil tindakan cepat untuk mengatasinya. Kelompok QT juga berpartisipasi dalam kelompok pengarah yang relevan untuk masalah keamanan. - Apa saja manfaat menggunakan QT?
QT memungkinkan pengembang untuk menulis kode yang sangat mudah dibaca dan dapat dipelihara dengan kinerja runtime yang sangat baik. Ini juga memberikan kemampuan lintas platform. - Apa kerangka kerja QT?
Kerangka kerja QT terdiri dari serangkaian komprehensif kelas perpustakaan C ++ yang menyederhanakan pengembangan aplikasi dan menyediakan modularitas. - Apa pola pengamat?
Pola pengamat adalah pola desain di mana suatu objek, yang disebut subjek, memelihara daftar pengamat yang bergantung padanya. Saat keadaan subjek berubah, ia memberi tahu semua pengamatnya untuk memperbarui secara otomatis. - Apa itu sinyal dan slot?
Sinyal dan slot adalah mekanisme dalam QT untuk komunikasi antara objek. Sinyal dipancarkan oleh objek ketika peristiwa tertentu terjadi, dan slot adalah fungsi yang dapat dihubungkan untuk menerima dan menangani sinyal. - Bagaimana informasi dapat ditransmisikan dalam QT?
Informasi dapat ditransmisikan dalam QT menggunakan sinyal dan slot, di mana sinyal membawa informasi dan slot menerima dan memprosesnya.
Jawaban:
1. Apakah qt menggunakan c++?
Ya, QT terutama menggunakan C ++ untuk pengembangannya. Ini memungkinkan pengembang untuk memanfaatkan kekuatan dan fleksibilitas bahasa C ++ dalam aplikasi QT mereka.
2. Apa itu Essentials Qt?
Esensi QT adalah modul mendasar di QT yang membentuk fondasi kerangka kerja. Ini termasuk QT Core, QT GUI, QT Multimedia, QT Network, QT Quick, dan QT SQL. Mereka memberikan fungsionalitas penting untuk berbagai aspek pengembangan aplikasi, seperti kelas non-grafis, komponen antarmuka pengguna grafis, dukungan multimedia, pemrograman jaringan, pengembangan aplikasi deklaratif, dan integrasi basis data menggunakan SQL.
3. Apa saja add-on QT?
QT menyediakan berbagai add-on yang menawarkan fungsi tambahan untuk tugas tertentu. Beberapa contoh add-on QT adalah:
- QT OpenGL: Kelas untuk Dukungan OpenGL. Tercerahkan mendukung kelas Qopengl dalam modul QT GUI.
- QT Wayland Compositor: Kerangka kerja untuk mengembangkan kompositor Wayland.
- Sensor QT: Kelas untuk Mengakses Perangkat Keras Sensor dan Mengaktifkan Pengenalan Gerakan Gerakan.
- QT WebView: Modul yang memungkinkan menampilkan konten web dalam aplikasi QML menggunakan API platform-native alih-alih tumpukan browser web lengkap.
- QT Safe Renderer: Menyediakan komponen rendering UI untuk membuat item kritis keselamatan, seperti indikator peringatan, dalam sistem keselamatan fungsional.
- QT SCXML: Menawarkan kelas dan alat untuk membuat mesin negara dari file SCXML dan menyematkannya dalam aplikasi.
4. Bagaimana QT memprioritaskan keamanan?
Kelompok QT menanggapi masalah keamanan dengan serius dan memiliki pendekatan khusus untuk mengatasi potensi kerentanan. Karena QT dikembangkan sebagai proyek open-source, analisis laporan kerentanan dilakukan oleh anggota staf yang ditunjuk dan kontributor eksternal. Kelompok QT secara aktif berpartisipasi dalam kelompok pengarah yang relevan dan segera mengambil tindakan setelah menerima laporan kerentanan. Prosedur terperinci untuk menangani laporan kerentanan diuraikan dalam Kebijakan Keamanan Proyek QT.
5. Pengetahuan apa yang dibutuhkan untuk menggunakan QT?
Sebelum memulai dengan QT, disarankan untuk memiliki pemahaman yang baik tentang C++. QT sangat memanfaatkan C ++ untuk pengembangannya, dan memiliki pemahaman yang kuat tentang bahasa akan membuatnya lebih mudah untuk bekerja dengan kerangka kerja QT dan API -nya.
6. Topik apa yang dibahas dalam seri tutorial QT?
Seri Tutorial QT mencakup berbagai topik untuk membantu pemula memulai dengan pengembangan aplikasi QT. Beberapa topik yang dibahas meliputi:
- Pengingat C ++ untuk menyegarkan dasar -dasarnya
- Pengantar QT, fitur-fiturnya, dan kemampuan lintas platform
- Panduan untuk menginstal QT SDK
- Gambaran Umum QT Creator dan fitur -fiturnya
- Membuat jendela pertama dan memahami proses kompilasi
- Menambahkan elemen interaktif seperti tombol ke aplikasi
- Memahami Hirarki Kelas QT dan Konsep Parenting Qobject
- Subklassing Qwidget dan Membuat Widget Kustom
- Sumber daya bacaan lebih lanjut dan rekomendasi
7. Fitur canggih apa yang dibahas dalam seri tutorial?
Selain dasar -dasarnya, Seri Tutorial QT menggali topik yang lebih canggih. Beberapa contoh fitur canggih yang dicakup adalah:
- Pola Pengamat: Menjelajahi Konsep dan Cara Menerapkannya dalam Aplikasi QT
- Sinyal dan slot: Memahami mekanisme komunikasi antar objek
- Informasi pengiriman: Cara meneruskan informasi di antara berbagai bagian aplikasi menggunakan sinyal dan slot
- Fitur Sinyal dan Slot: Fitur dan Kemampuan Tambahan Sinyal dan Mekanisme Slot
8. Adalah qt cross-platform?
Ya, QT adalah kerangka kerja lintas platform. Ini memungkinkan pengembang untuk menulis aplikasi mereka sekali dan menggunakannya di beberapa platform, termasuk Windows, MacOS, Linux, Android, dan iOS. QT memberikan abstraksi dan API yang menangani detail spesifik platform, membuatnya lebih mudah untuk mengembangkan aplikasi yang bekerja secara konsisten di berbagai sistem operasi yang berbeda.
9. Apa tujuan qt esensial dan add-ons qt?
QT Essentials membentuk fondasi kerangka kerja QT dengan menyediakan fungsionalitas inti dan kelas yang banyak digunakan dalam pengembangan aplikasi. Mereka memastikan pengalaman pengembangan yang konsisten dan andal di berbagai platform. Di sisi lain, add-on QT menawarkan modul dan fitur tambahan yang lebih spesifik untuk kasus penggunaan atau domain tertentu. Mereka menyediakan fungsionalitas dan kemampuan yang diperluas di luar kebutuhan.
10. Bagaimana QT memastikan keamanan?
QT mengambil pendekatan proaktif untuk keamanan dengan secara aktif menganalisis dan mengatasi kerentanan potensial dalam produknya. Kelompok QT berpartisipasi dalam kelompok pengarah yang relevan dan segera menanggapi laporan kerentanan. Selain itu, sebagai proyek open-source, QT mengundang kontributor eksternal untuk meninjau dan menganalisis kode, meningkatkan keamanan keseluruhan kerangka kerja.
11. Apa saja manfaat menggunakan QT?
Ada beberapa manfaat untuk menggunakan QT untuk pengembangan aplikasi:
- QT menyediakan satu set komprehensif kelas perpustakaan C ++ yang menyederhanakan pengembangan aplikasi, membuatnya lebih cepat dan lebih mudah untuk membangun aplikasi yang kuat.
- Kode yang ditulis menggunakan QT sangat mudah dibaca, dapat dipelihara, dan dapat digunakan kembali, mengurangi upaya pengembangan dan meningkatkan produktivitas.
- QT adalah cross-platform, memungkinkan pengembang untuk menulis aplikasi sekali dan menggunakannya di beberapa platform.
- Kerangka kerja ini menawarkan kinerja runtime yang sangat baik, memastikan aplikasi yang lancar dan responsif.
- QT memiliki jejak kecil, artinya executable yang dihasilkan kompak dan efisien.
12. Apa kerangka kerja QT?
Kerangka kerja QT adalah kumpulan komprehensif kelas perpustakaan C ++ yang menyediakan berbagai fungsionalitas untuk pengembangan aplikasi. Ia menawarkan struktur yang dimodulus, memungkinkan pengembang hanya menggunakan komponen yang mereka butuhkan. QT menyediakan alat, API, dan abstraksi untuk berbagai aspek pengembangan aplikasi, termasuk desain antarmuka pengguna, integrasi basis data, jaringan, multimedia, dan banyak lagi. Ini dirancang untuk menyederhanakan proses pengembangan, mempromosikan penggunaan kembali kode, dan mengaktifkan pengembangan aplikasi lintas platform.
13. Apa pola pengamat?
Pola pengamat adalah pola desain perilaku yang memungkinkan komunikasi satu-ke-banyak antara objek. Dalam pola pengamat, ada dua entitas utama: subjek dan pengamat. Subjek memelihara daftar pengamat dan memberitahukannya secara otomatis saat keadaan berubah. Pola ini mempromosikan kopling longgar antara objek dan memungkinkan sistem yang sangat interaktif dan dinamis. Dalam QT, pola pengamat dapat diimplementasikan menggunakan sinyal dan slot, di mana subjek memancarkan sinyal dan pengamat menghubungkan slot mereka ke sinyal untuk menerima pembaruan.
14. Apa itu sinyal dan slot?
Sinyal dan slot adalah mekanisme yang disediakan oleh QT untuk komunikasi antara objek. Sinyal adalah fungsi anggota khusus dari kelas yang diturunkan dari QObject yang dapat dipancarkan untuk menunjukkan bahwa peristiwa atau kondisi tertentu telah terjadi. Slot adalah fungsi anggota yang dapat dihubungkan ke sinyal untuk menerima dan menanganinya. Sinyal dan slot dapat digunakan untuk membangun kopling longgar di antara objek, memungkinkan mereka untuk berkomunikasi tanpa satu sama lain dengan erat. Ini mempromosikan modularitas dan fleksibilitas dalam desain aplikasi QT.
15. Bagaimana informasi dapat ditransmisikan dalam QT?
Di QT, informasi dapat ditransmisikan antara berbagai bagian aplikasi menggunakan sinyal dan slot. Sinyal dapat membawa informasi dengan mendefinisikan parameter, dan slot dapat menerima dan memproses informasi itu. Saat sinyal dipancarkan, semua slot yang terhubung akan dipanggil dengan informasi yang disediakan. Mekanisme ini memungkinkan objek untuk berkomunikasi dan bertukar data tanpa secara langsung saling merujuk, mempromosikan kopling longgar dan fleksibilitas dalam desain aplikasi.
Kerangka kerja QT
QT Essentials Tentukan fondasi QT di semua platform. Mereka tersedia di semua platform pengembangan yang didukung dan di platform target yang diuji.
Apakah qt menggunakan c++
Об этой страницental
Ы заре kondecedit. С помощю этой страницы с сожем определить, что запросы о о ancing оеет иенно ы,. Почем это мопо произойтиonya?
Ээ страница отображается в тех слчаях, когда автомически систе secara google ристрюи uman рисисilan рancing рancing рancing рancing рancing рancing рancing рancing рancing рancing рancing рancing рancing рancing рancing рancing рancing рии и menelepon которые наршают уловия исполззованияisah. Страница перестанет отображаться после то A, как эти запросы прекратяupanisah яяisah ancing ancing. До это A.
Источником запросов может слжить Врддносно secara п, пар иа бас00 иасазаз) ыылку запросов. Если Вы исползеет общий дсст в и итернет, проблем м ы ы ip ip ip00 ip ip ip ip ip uman ip ip ip ip ip ip uman ip ip ip ip ip ip ip uman ip ip ip ip ip ip ip ON ip ip ip ip ip ip ON. Обратитесь к своем системном аинистратору. Подробнее secara.
Пожет такжeda появлят secara, если Вы Вонот A рлжвввв dari рыч о оаilat оыч о оаilat, еами, ии же Водитedit запросы чень часто засто.
Kerangka kerja QT
Kerangka kerja QT berisi serangkaian komprehensif kelas perpustakaan C ++ yang sangat intuitif dan modularisasi dan dimuat dengan API untuk menyederhanakan pengembangan aplikasi Anda. QT menghasilkan kode yang sangat mudah dibaca, mudah dipelihara dan dapat digunakan kembali dengan kinerja runtime tinggi dan jejak kecil-dan itu adalah cross-platform.
Qt Essentials
Membuat lintas-platform yang sebenarnya menjadi
QT Essentials Tentukan fondasi QT di semua platform. Mereka tersedia di semua platform pengembangan yang didukung dan di platform target yang diuji.
Qt core
Kelas inti non-grafis yang digunakan oleh modul lain.
QT GUI
Kelas dasar untuk komponen antarmuka pengguna grafis. Termasuk OpenGL.
QT Multimedia
Kelas untuk fungsionalitas audio, video, radio dan kamera.
Jaringan QT
Kelas untuk membuat pemrograman jaringan lebih mudah dan lebih portabel.
QT cepat
Kerangka Deklaratif untuk Membangun Aplikasi yang Sangat Dinamis Dengan Antarmuka Pengguna Kustom.
QT SQL
Kelas untuk integrasi basis data menggunakan SQL.
Qt add-ons
Add-on yang tepat
untuk tugas yang tepat
QT Essentials Tentukan fondasi QT di semua platform. Mereka tersedia di semua platform pengembangan yang didukung dan di platform target yang diuji.
QT OpenGL
Kelas Dukungan OpenGL. Tercerahkan mendukung kelas Qopengl dalam modul QT GUI.
QT Wayland Compositor
Menyediakan kerangka kerja untuk mengembangkan kompositor Wayland.
Sensor QT
Memberikan akses ke perangkat keras sensor dan pengenalan gerakan gerak.
QT Webview
Menampilkan konten web dalam aplikasi QML dengan menggunakan API asli ke platform, tanpa perlu menyertakan tumpukan browser web lengkap.
Qt Renderer yang aman
Memberikan komponen rendering UI yang dapat digunakan untuk membuat item kritis keselamatan, seperti indikator peringatan, dalam sistem keselamatan fungsional.
Qt scxml
Menyediakan kelas dan alat untuk membuat mesin negara dari file SCXML dan menanamkannya dalam aplikasi.
Praktik kerangka kerja QT untuk menangani masalah keamanan
Kelompok QT memprioritaskan mengatasi potensi ancaman kerentanan dan masalah keamanan dalam produknya. Dengan penerapan lintas platform yang luas dan API yang luas, kerangka kerja QT rentan terhadap risiko cyber di berbagai bidang. Selanjutnya, QT dikembangkan sebagai proyek open source, yang membutuhkan analisis laporan kerentanan oleh anggota staf yang ditunjuk dan kontributor eksternal. Sejak awal, kelompok QT secara aktif berpartisipasi dalam kelompok pengarah yang relevan dan mengambil tindakan cepat atas laporan kerentanan. Laporan kerentanan diatur oleh prosedur spesifik yang diuraikan dalam Kebijakan Keamanan Proyek QT.
QT untuk pemula
Peringatan : Pastikan memiliki pengetahuan tentang C ++ sebelum memulai!
Komentar : Target seri tutorial ini terutama QT4. Bahkan jika sebagian besar tutorial ini juga berlaku untuk QT5, kasus QT5 dibahas di bagian yang terpisah.
Isi
- 1 C ++ Pengingat
- 2 Pengantar QT
- 3 Menginstal QT SDK
- 4 fitur pencipta QT
- 5 Jendela Pertama Kami
- 6 Bagaimana program QT dikompilasi
- 7 Tombol Cantik
- 8 Hirarki Kelas QT
- 9 Sistem Parenting
- 10 Subklassing Qwidget
- 11 Bacaan lebih lanjut
- 12 Pola Pengamat
- 13 Sinyal dan Slot
- 14 informasi pengiriman
- 15 fitur sinyal dan slot
- 16 contoh
- 16.1 Menanggapi suatu acara
- 21.1 Membuat Slot Kustom
- 21.2 membuat sinyal
- 21.3 Contoh
Pengingat C ++
Itu tanda tangan dari suatu metode atau fungsi hanyalah prototipe. Itu sepenuhnya menggambarkan metode atau fungsi. Ini berisi tipe yang dikembalikan, nama metode/fungsi (termasuk nama kelas) dan parameter, termasuk jenis.
Jenis MyObject::fungsi my( Tipe 1 param1, Type2 *param2, const Type3 ¶m3 );
Baru untuk Qt? Tidak tahu bagaimana memulai? Maka halaman wiki ini cocok untuk Anda! Ini adalah tutorial langkah demi langkah yang menyajikan semua kekhususan dan fitur QT. Ingin belajar lebih banyak? Lihat kelas C ++ GUI kami untuk kelas QT 5 dan C ++ GUI untuk QT 6.
Pengantar Qt
QT (diucapkan sebagai “lucu”, bukan “cu-tee”) adalah kerangka kerja lintas platform yang biasanya digunakan sebagai toolkit grafis, meskipun juga sangat membantu dalam membuat aplikasi CLI. Ini berjalan pada tiga desktop utama OS, serta OS seluler, seperti Symbian, Nokia Belle, Meego Harmattan, Meego atau BB10, dan pada perangkat tertanam. Port untuk android (kebutuhan) dan iOS juga sedang dalam pengembangan.
QT memiliki koleksi modul yang mengesankan, termasuk
- Qtcore, Perpustakaan Basis yang menyediakan wadah, manajemen utas, manajemen acara, dan banyak lagi
- Qtgui Dan Qtwidgets, Toolkit GUI untuk Desktop, yang menyediakan banyak komponen grafis untuk merancang aplikasi.
- Qtnetwork, yang menyediakan satu set kelas yang berguna untuk menangani komunikasi jaringan
- Qtwebkit, mesin webkit, yang memungkinkan penggunaan halaman web dan aplikasi web dalam aplikasi QT.
- Qtsql, Lapisan abstraksi SQL RDBM yang ditampilkan lengkap dengan driver sendiri, dukungan untuk ODBC, SQLite, MySQL dan PostgreSQL tersedia di luar kotak
- Qtxml, Dukungan untuk XML Parsing (SAX) dan DOM sederhana
- Qtxmlpatterns, Dukungan untuk Validasi XSLT, XPATH, XQUERY, dan Skema
Menginstal QT SDK
Untuk mulai menulis aplikasi QT, Anda harus mendapatkan pustaka QT, dan, jika Anda mau, sebuah IDE. Mereka dapat dibangun dari sumber, atau lebih baik, diunduh sebagai SDK dari halaman unduhan.
SDK ini mencakup banyak fitur, seperti kompiler silang untuk Symbian dan Nokia N9. Anda dapat memilih untuk tidak menginstalnya dengan memilih “Instal Kustom”. Pastikan untuk menyimpan paket ini
- Dokumentasi Qmake
- Dokumentasi QT
- Qt 4.8.1 (desktop), dengan asumsi Qt 4.8.1 adalah versi terbaru.
- Qt Creator
Paket -paket ini juga bisa berguna
- Contoh QT
- Qt ahli bahasa
Anda dapat memilih paket lain jika Anda ingin mengembangkan untuk Symbian / Maemo / Meego, atau dengan versi QT yang lebih lama.
NB : Di Linux, lebih baik menggunakan paket yang disediakan distribusi Anda. QT Creator harus tersedia di hampir semua distribusi, dan menginstalnya harus menginstal semua dependensi, seperti perpustakaan, kompiler, dan header pengembangan.
Catatan: Lihat Halaman Official Memulai dengan QT Widgets untuk tutorial alternatif.
Kami sekarang siap membuat jendela pertama kami. Dan itu akan seperti biasa, a Halo Dunia.
Fitur QT Creator
Sebelum menulis aplikasi GUI pertama kami, mari kita temukan pencipta QT.
QT Creator adalah IDE lain untuk C ++, tetapi sangat cocok untuk pengkodean aplikasi QT. Ini menyediakan browser DOC dan “desainer”, yang membuat penciptaan windows lebih mudah, semuanya dibungkus dalam antarmuka pengguna yang dirancang dengan baik. Itu juga salah satu IDE tercepat yang tersedia.
Jendela pertama kami
Mari kita mulai dengan membuat proyek pertama kita. Ini akan menjadi proyek kosong, jadi kami harus melanjutkan: file> file atau proyek baru> proyek lain> proyek QT kosong
Ikuti Wizard, dan setelah memilih folder dan nama proyek, dan pilih versi QT yang akan digunakan, Anda harus mendarat di halaman ini
Ini adalah file proyek (ekstensi .pro). QT menggunakan alat baris perintah yang mem -parsing file proyek ini untuk menghasilkan “makefiles”, file yang digunakan oleh kompiler untuk membangun aplikasi. Alat ini disebut Qmake. Tapi, kita seharusnya tidak terlalu repot tentang QMake, karena pencipta QT akan melakukan pekerjaan itu untuk kita.
Dalam file proyek, ada beberapa kode minimal yang harus selalu ditulis:
Template = aplikasi target = name_of_the_app qt = core gui freaterthan (qt_major_version, 4): qt += widgets
- TEMPLAT menggambarkan jenis yang akan dibangun. Ini bisa berupa aplikasi, perpustakaan, atau sekadar subdirektori.
- TARGET adalah nama aplikasi atau perpustakaan.
- Qt digunakan untuk menunjukkan perpustakaan apa (modul QT) yang digunakan dalam proyek ini. Karena aplikasi pertama kami adalah GUI kecil, kami akan membutuhkan qtcore dan qtgui.
Sekarang mari kita tambahkan titik masuk aplikasi kita. Menggunakan File> File atau Proyek Baru> C ++> File Sumber C ++ harus melakukan pekerjaan.
Ikuti Wizard sekali lagi, menamai file “Main”, dan Anda sudah selesai. Anda akan melihat bahwa dalam file proyek, baris baru telah ditambahkan secara otomatis oleh QT Creator:
Template = aplikasi target = name_of_the_app qt = core gui freaterthan (qt_major_version, 4): qt += Sumber widget += main.CPP
Header dan file sumber dapat ditambahkan secara manual dengan
Header += first_file.h Second_file.H Sumber += first_file.CPP Second_file.CPP
Header += first_file.h Second_file.H Sumber += first_file.CPP Second_file.CPP
Jika Anda menggunakan Wizards QT Creator, ini dilakukan secara otomatis.
Kode sumber minimal dari aplikasi QT adalah
#termasuk int utama(int argc, arang **argv) Qapplication aplikasi (argc, argv); kembali aplikasi.EXEC(); >
Qapplication adalah kelas yang sangat penting. Itu menangani argumen masukan, tetapi juga banyak hal lain, dan terutama, Loop acara. Loop acara adalah loop yang menunggu input pengguna di aplikasi GUI.
Saat memanggil aplikasi.exec () Loop acara diluncurkan.
Mari kita kompilasi aplikasi ini. Dengan mengklik panah hijau di kiri bawah, QT Creator akan mengkompilasi dan menjalankannya. Dan apa yang terjadi? Aplikasi tampaknya diluncurkan dan tidak menanggapi. Itu sebenarnya normal. Lingkaran acara berjalan dan menunggu acara, seperti klik mouse pada GUI, tetapi kami tidak menyediakan acara apa pun yang harus diproses, sehingga akan berjalan tanpa batas waktu.
Mari kita tambahkan sesuatu untuk ditampilkan.
#termasuk #termasuk int utama(int argc, arang **argv) Qapplication aplikasi (argc, argv); Qpushbutton tombol ("Halo Dunia !"); tombol.menunjukkan(); kembali aplikasi.EXEC(); >
Kompilasi, dan … ini dia ! Jendela pertama kami !
Bagaimana program QT dikompilasi
Pencipta QT melakukan tugas memohon sistem pembuatan untuk kita, tetapi mungkin menarik untuk mengetahui bagaimana program QT dikompilasi.
Untuk program kecil, mudah untuk mengkompilasi semuanya dengan tangan, membuat file objek, kemudian menautkannya. Tetapi untuk proyek yang lebih besar, baris perintah dengan mudah menjadi sulit untuk ditulis. Jika Anda terbiasa dengan Linux, Anda mungkin tahu bahwa semua program dikompilasi menggunakan Makefile yang menjelaskan semua baris perintah ini untuk dieksekusi. Tetapi untuk beberapa proyek, bahkan menulis makefile bisa menjadi membosankan.
Qmake adalah sistem build yang dilengkapi dengan QT, dan menghasilkan makefile itu untuk Anda (ada sistem build lain yang dapat digunakan, tetapi di sini kami memberikan contoh dengan Qmake). Dengan sintaks sederhana, ini menghasilkan makefile yang digunakan untuk mengkompilasi program QT. Tapi itu bukan satu -satunya tujuannya. QT menggunakan meta-objek untuk memperluas fungsionalitas C ++, dan QMake bertanggung jawab untuk menyiapkan makefile yang berisi fase ekstraksi meta-objek ini. Anda akan melihat ini di bab lain.
Jadi, aplikasi QT dikompilasi dalam 3 langkah
- A .pro File ditulis untuk menggambarkan proyek untuk dikompilasi
- Makefile dihasilkan menggunakan Qmake
- Program ini dibangun menggunakan membuat (atau nmake atau jom di windows)
Tombol cantik
Bab ini memberikan gambaran tentang modul widget. Ini akan menutupi sifat widget, skema warisan yang digunakan dalam widget, dan juga sistem pengasuhan.
Sekarang kami memiliki tombol kami, kami mungkin ingin sedikit menyesuaikannya.
Objek QT memiliki banyak atribut yang dapat dimodifikasi menggunakan getters dan setter. Di QT, jika atribut dipanggil foo, Getter dan Setter terkait akan memiliki tanda tangan ini
T foo() const; ruang kosong setfoo(const T);
Faktanya, QT memperluas sistem atribut dan getters ini dan setter ke sesuatu yang disebut Properti. Properti adalah nilai dari jenis apa pun yang dapat diakses, dimodifikasi atau konstan, dan dapat memberi tahu perubahan. Sistem properti bermanfaat, terutama di bagian ketiga (QML). Untuk saat ini, kami akan menggunakan “atribut” atau “properti” untuk melakukan hal yang sama.
Qpushbutton memiliki banyak properti:
Jadi kami dapat menggunakannya untuk menyesuaikan tombol.
Pertama -tama mari kita ubah teks dan tambahkan tooltip
#termasuk #termasuk int utama(int argc, arang **argv) Qapplication aplikasi (argc, argv); Qpushbutton tombol; tombol.setText("Teks saya"); tombol.settooltip("A Tooltip"); tombol.menunjukkan(); kembali aplikasi.EXEC(); >
Inilah hasilnya:
Kami juga dapat mengubah font. Di QT, font diwakili dengan kelas QFONT. Dokumentasi memberikan banyak informasi. Kami sangat peduli di sini dengan salah satu konstruktor Qfont.
Qfont(const Qstring & keluarga, int pointSize = - -1, int berat = -1, bool miring = PALSU)
Untuk mengubah font, kita harus instantiate kelas qfont, dan meneruskannya ke qpushbutton menggunakan setFont . Cuplikan berikut akan mengubah font menjadi kurir.
Qfont font ("Kurir"); tombol.setfont(font);
Anda dapat mencoba parameter lain dari konstruktor QFont untuk mereproduksi tombol yang diwakili dalam gambar pertama dalam bab ini.
Mengatur ikon juga tidak terlalu sulit. Ikon diwakili dengan kelas Qicon. Dan Anda dapat membuat ikon asalkan ia memiliki jalur absolut (atau relatif) dalam sistem file. Saya sarankan memberikan jalur absolut dalam contoh ini. Tetapi untuk pertimbangan penyebaran, Anda dapat menggunakan jalur relatif, atau lebih baik, sistem sumber daya.
Qicon ikon ("/path/to/my/ikon/ikon.png "); tombol.seticon(ikon);
Di Linux, dan beberapa OS lainnya, ada cara yang nyaman untuk mengatur ikon dari tema ikon. Ini dapat dilakukan dengan menggunakan metode statis:
Qicon Qicon::Fromtheme ( const Qstring &nama, const Qicon &Fallback = Qicon());
Misalnya, dalam tangkapan layar di awal bab ini, Smiley berasal dari tema ikon oksigen kde dan diatur oleh:
tombol.seticon(Qicon::Fromtheme("Smile wajah"));
Hierarki kelas QT
QT banyak menggunakan warisan, terutama di modul widget. Grafik berikut menunjukkan beberapa warisan ini:
Qobject adalah kelas paling dasar di QT. Sebagian besar kelas di QT mewarisi dari kelas ini. Qobject memberikan beberapa kemampuan yang sangat kuat seperti:
- Nama Objek : Anda dapat mengatur nama, sebagai string, ke objek dan mencari objek dengan nama.
- sistem pengasuhan anak (dijelaskan di bagian berikut)
- sinyal dan slot (dijelaskan dalam bab berikutnya)
- Manajemen acara
Widget dapat menanggapi peristiwa dan menggunakan sistem pengasuhan anak dan sinyal dan mekanisme slot. Semua widget mewarisi dari qObject. Widget paling dasar adalah qwidget . QWIDGET berisi sebagian besar properti yang digunakan untuk menggambarkan jendela, atau widget, seperti posisi dan ukuran, kursor mouse, tooltips, dll.
Komentar : Di QT, widget juga bisa menjadi jendela. Di bagian sebelumnya, kami menampilkan tombol yang merupakan widget, tetapi muncul secara langsung sebagai jendela. Tidak perlu untuk kelas “QWindow”.
Hampir semua elemen grafis mewarisi dari qwidget. Kita dapat mencantumkan misalnya:
QABSTRACTBUTTON, kelas dasar untuk semua tipe tombol qpushbutton qCheckbox qradiobutton qframe, yang menampilkan bingkai qlabel, yang menampilkan teks atau gambar
Warisan ini dilakukan untuk memfasilitasi manajemen properti. Properti bersama seperti ukuran dan kursor dapat digunakan pada komponen grafis lainnya, dan QabstractButton menyediakan properti dasar yang dibagikan oleh semua tombol.
Sistem pengasuhan anak
Sistem Parenting adalah cara yang nyaman untuk berurusan dengan objek di QT, terutama widget. Objek apa pun yang mewarisi dari QObject dapat memiliki orang tua dan anak -anak. Pohon hierarki ini membuat banyak hal nyaman:
- Ketika sebuah objek dihancurkan, semua anaknya juga dihancurkan. Jadi, menelepon menghapus menjadi opsional dalam kasus tertentu.
- Semua qobject memiliki findchild Dan Findchildren Metode yang dapat digunakan untuk mencari anak -anak dari objek yang diberikan.
- Widget anak dalam qwidget secara otomatis muncul di dalam widget induk.
Cuplikan berikut yang membuat qpushbutton di dalam qpushbutton:
#termasuk #termasuk int utama(int argc, arang **argv) Qapplication aplikasi (argc, argv); Qpushbutton Button1 ("tes"); Qpushbutton Button2 ("lainnya", &Button1); Button1.menunjukkan(); kembali aplikasi.EXEC(); >
Anda juga dapat mencatat bahwa saat aplikasi ditutup, Button1, yang dialokasikan pada tumpukan, ditangani. Karena tombol2 memiliki tombol1 sebagai orang tua, itu dihapus juga. Anda bahkan dapat menguji ini di QT Creator di bagian Analisis, dengan mencari kebocoran memori – tidak akan ada.
Jelas tidak ada manfaat dalam meletakkan tombol di dalam tombol, tetapi berdasarkan ide ini, kami mungkin ingin memasukkan tombol di dalam wadah, yang tidak menampilkan apa pun. Wadah ini hanyalah qwidget .
Kode berikut digunakan untuk menampilkan tombol di dalam widget:
#termasuk #termasuk int utama(int argc, arang **argv) Qapplication aplikasi (argc, argv); Qwidget jendela; jendela.setFixedSize(100, 50); Qpushbutton *tombol = baru Qpushbutton("Halo Dunia", &jendela); tombol->setGeometry(10, 10, 80, 30); jendela.menunjukkan(); kembali aplikasi.EXEC(); >
Perhatikan bahwa kami membuat widget ukuran tetap (yang bertindak sebagai jendela) menggunakan setFixedSize. Metode ini memiliki tanda tangan berikut:
ruang kosong Qwidget::setFixedSize(int lebar, int tinggi);
Kami juga memposisikan tombol menggunakan setGeometry. Metode ini memiliki tanda tangan berikut:
ruang kosong Qwidget::setGeometry(int X, int y, int lebar, int tinggi);
Subklassing Qwidget
Sampai sekarang, kami telah memasukkan semua kode kami di utama fungsi. Ini bukan masalah bagi contoh sederhana kami, tetapi untuk aplikasi yang semakin kompleks kami mungkin ingin membagi kode kami menjadi kelas yang berbeda. Yang sering dilakukan adalah membuat kelas yang digunakan untuk menampilkan jendela, dan mengimplementasikan semua widget yang terkandung dalam jendela ini sebagai atribut kelas ini.
Di dalam QT Creator, Anda dapat secara otomatis membuat kelas baru dengan File> File atau Project baru> C ++> C ++ Class
Buat kelas mewarisi dari QWIDGET, dan Anda harus mendapatkan kode yang mirip dengan di bawah ini
#ifndef window_h #define window_h #termasuk kelas Jendela : publik Qwidget Q_Object publik: eksplisit Jendela(Qwidget *induk = 0); sinyal: publik slot: >; #berakhir jika // window_h
#termasuk "jendela.H" Jendela::Jendela(Qwidget *induk) : Qwidget(induk) <>
Anda dapat melihat bahwa pencipta QT secara otomatis menghasilkan templat kelas. Perhatikan bahwa ada beberapa elemen baru di header:
- Itu Q_Object makro.
- Kategori metode baru: sinyal
- Kategori metode baru: slot publik
Semua elemen ini akan dijelaskan dalam bab berikutnya, dan tidak ada yang dibutuhkan sekarang. Menerapkan jendela dilakukan di konstruktor. Kita dapat mendeklarasikan ukuran jendela, serta widget yang berisi jendela ini dan posisinya. Misalnya, menerapkan jendela sebelumnya yang berisi tombol dapat dilakukan dengan cara ini:
#termasuk #termasuk "jendela.H" int utama(int argc, arang **argv) Qapplication aplikasi (argc, argv); Jendela jendela; jendela.menunjukkan(); kembali aplikasi.EXEC(); >
#ifndef window_h #define window_h #termasuk kelas Qpushbutton; kelas Jendela : publik Qwidget publik: eksplisit Jendela(Qwidget *induk = 0); pribadi: Qpushbutton *m_button; >; #berakhir jika // window_h
#termasuk "jendela.H" #termasuk Jendela::Jendela(Qwidget *induk) : Qwidget(induk) // atur ukuran jendela setFixedSize(100, 50); // Buat dan posisikan tombol m_button = baru Qpushbutton("Halo Dunia", ini); m_button->setGeometry(10, 10, 80, 30); >
Harap dicatat bahwa tidak perlu menulis destruktor untuk menghapus m_button . Dengan sistem pengasuhan, ketika instance jendela keluar dari tumpukan, M_BUTTON secara otomatis dihapus.
Bacaan lebih lanjut
Tinjauan qpushbutton yang lebih baik diberikan di halaman wiki ini cara menggunakan qpushbutton
Pola pengamat
Hampir semua toolkit UI memiliki mekanisme untuk mendeteksi tindakan pengguna, dan menanggapi tindakan ini. Beberapa dari mereka menggunakan panggilan balik, orang lain menggunakan pendengar, Namun pada dasarnya, semuanya terinspirasi oleh pola pengamat.
Pola pengamat digunakan saat tampak objek ingin memberi tahu orang lain pengamat objek tentang perubahan keadaan. Berikut adalah beberapa contoh konkret:
- Seorang pengguna telah mengklik tombol, dan menu harus ditampilkan.
- Halaman web yang baru saja selesai memuat, dan suatu proses harus mengekstraksi beberapa informasi dari halaman yang dimuat ini.
- Pengguna sedang menggulir melalui daftar item (di toko aplikasi misalnya), dan telah mencapai akhir, jadi lebih banyak item yang harus dimuat.
Pola pengamat digunakan di mana -mana dalam aplikasi GUI, dan sering mengarah ke beberapa kode boilerplate. QT dibuat dengan gagasan menghapus kode boilerplate ini dan memberikan sintaks bersih yang bagus. Mekanisme sinyal dan slot memungkinkan ini.
Sinyal dan slot
Alih -alih memiliki objek dan pengamat yang dapat diamati, dan mendaftarkannya, QT menyediakan dua konsep tingkat tinggi: sinyal Dan slot.
- A sinyal adalah pesan yang dapat dikirim oleh suatu objek, biasanya untuk melaporkan perubahan status.
- A slot adalah fungsi yang menerima dan menanggapi sinyal.
Berikut adalah beberapa contoh sinyal dan slot dari kelas QPushbutton kami yang terkenal.
Seperti yang Anda lihat, nama mereka cukup eksplisit. Sinyal -sinyal ini dikirim saat pengguna mengklik (menekan, lalu melepaskan), menekan atau melepaskan tombol.
Berikut beberapa slot, dari kelas yang berbeda.
- Qapplication :: Berhenti
- QWIDGET :: SetEnabled
- QPUSHBUTTON :: Settext
Untuk menanggapi sinyal, slot harus terhubung ke sinyal. QT menyediakan metode qobject ::Menghubung. Itu digunakan dengan cara ini, dengan dua makro SINYAL Dan Slot .
Fooobjecta *FOOA = baru Fooobjecta(); Fooobjectb *foob = baru Fooobjectb(); Qobject::Menghubung(FOOA, SINYAL (Balkah()), foob, Slot (Baz()));
Contoh ini mengasumsikan bahwa fooobjecta memiliki sinyal berlamah, dan fooobjectb memiliki slot Baz.
Anda harus menulis tanda tangan sinyal dan slot di dalam dua makro SINYAL Dan Slot. Jika Anda ingin informasi lebih lanjut tentang apa yang dilakukan makro ini, silakan baca bagian terakhir dari bab ini.
Komentar : Pada dasarnya, sinyal dan slot adalah metode, yang mungkin atau mungkin tidak memiliki argumen, tetapi itu tidak pernah mengembalikan apapun. Sementara gagasan sinyal sebagai metode tidak biasa, slot sebenarnya adalah metode yang nyata, dan dapat disebut seperti biasa dengan metode lain, atau saat menanggapi sinyal.
Mengirimkan informasi
Mekanisme sinyal dan slot berguna untuk menanggapi tombol klik, tetapi dapat melakukan lebih dari itu. Misalnya, ini juga dapat digunakan untuk mengkomunikasikan informasi. Katakanlah saat memainkan lagu, bilah kemajuan diperlukan untuk menunjukkan berapa banyak waktu yang tersisa sebelum lagu berakhir. Pemutar media mungkin memiliki kelas yang digunakan untuk memeriksa kemajuan media. Sebuah contoh kelas ini dapat secara berkala mengirim a kutu sinyal, dengan nilai kemajuan. Sinyal ini dapat dihubungkan ke QProgressBar, yang dapat digunakan untuk menampilkan kemajuan.
Kelas hipotetis yang digunakan untuk memeriksa kemajuan mungkin memiliki sinyal yang memiliki tanda tangan ini:
ruang kosong MEDIAPROGRESSMANAGER::kutu(int milidetik);
Dan kami tahu dari dokumentasi, bahwa QProgressBar memiliki slot ini:
ruang kosong QProgressbar::setValue(int nilai);
Anda dapat melihat bahwa sinyal dan slot memiliki jenis parameter yang sama, terutama jenisnya. Jika Anda menghubungkan sinyal ke slot yang tidak berbagi parameter yang sama, ketika koneksi selesai (saat run-time) Anda akan mendapatkan peringatan seperti:
Qobject::Menghubung: Tidak sesuai pengirim/penerima argumen
Ini karena sinyal mengirimkan informasi ke slot menggunakan parameter. Parameter pertama sinyal diteruskan ke yang pertama dari slot, dan sama untuk kedua, ketiga, dan sebagainya.
Kode untuk koneksi akan terlihat seperti ini:
MEDIAPROGRESSMANAGER *Pengelola = baru MEDIAPROGRESSMANAGER(); QProgressbar *kemajuan = baru QProgressbar(jendela); Qobject::Menghubung(Pengelola, SINYAL (kutu(int)), kemajuan, Slot (setValue(int)));
Anda dapat melihat bahwa Anda harus memberikan tanda tangan di dalam SINYAL Dan Slot makro, memberikan jenis nilai yang melewati sinyal. Anda juga dapat memberikan nama variabel jika Anda mau. (Ini sebenarnya lebih baik).
Fitur sinyal dan slot
- Sinyal dapat dihubungkan ke beberapa slot
- Banyak sinyal dapat dihubungkan ke slot
- Sinyal dapat dihubungkan ke sinyal: ini adalah sinyal relaying. Sinyal kedua dikirim jika sinyal pertama dikirim.
Contoh
Menanggapi suatu acara
Ingat aplikasi tombol kami? Mari kita coba membuat sesuatu dengan aplikasi ini, seperti bisa menutupnya dengan mengklik tombol. Kita sudah tahu bahwa qpushbutton menyediakan diklik sinyal. Kami juga harus tahu bahwa qapplication menyediakan berhenti slot, yang menutup aplikasi.
Untuk membuat klik pada tombol Tutup aplikasi, kita harus menghubungkan sinyal diklik dipancarkan oleh tombol ke berhenti slot instance qapplication ini. Kami dapat memodifikasi kode dari bagian sebelumnya untuk melakukan ini, tetapi sebelum kami melakukannya, Anda mungkin bertanya -tanya bagaimana cara mendapatkan akses ke instance qapplication saat Anda berada di kelas lain. Sebenarnya, ini sangat sederhana, karena ada fungsi statis dalam qapplication, dengan tanda tangan berikut, yang digunakan untuk mendapatkannya:
Qapplication * Qapplication::contoh()
Ini mengarah pada modifikasi kode kami sebelumnya:
#termasuk "jendela.H" #termasuk #termasuk Jendela::Jendela(Qwidget *induk) : Qwidget(induk) // atur ukuran jendela setFixedSize(100, 50); // Buat dan posisikan tombol m_button = baru Qpushbutton("Halo Dunia", ini); m_button->setGeometry(10, 10, 80, 30); // Baru: Buat koneksi Menghubung(m_button, SINYAL (diklik()), Qapplication::contoh(), Slot (berhenti())); >
Saat tombol di dalam jendela diklik, aplikasi akan berhenti.
Mengirimkan informasi dengan sinyal dan slot
Berikut adalah contoh yang lebih sederhana untuk transmisi informasi. Ini hanya menampilkan bilah kemajuan dan slider (dibuat oleh qslider) di dalam jendela, dan saat slider dipindahkan, nilai bilah kemajuan disinkronkan dengan koneksi yang sangat sederhana.
Sinyal dan slot yang menarik adalah:
ruang kosong Qslider::ValueChanged(int nilai); ruang kosong QProgressbar::setValue(int nilai);
Qslider secara otomatis memancarkan sinyal yang dinilai dengan nilai baru yang dilewati sebagai parameter ketika nilai diubah, dan metode setValue QProgressbar, digunakan, seperti yang telah kita lihat, untuk mengatur nilai bilah kemajuan.
Ini mengarah ke kode berikut:
#termasuk #termasuk #termasuk int utama(int argc, arang **argv) Qapplication aplikasi (argc, argv); // Buat jendela kontainer Qwidget jendela; jendela.setFixedSize(200, 80); // Buat bilah kemajuan // dengan kisaran antara 0 dan 100, dan nilai awal 0 QProgressbar *Progressbar = baru QProgressbar(&jendela); Progressbar->setrange(0, 100); Progressbar->setValue(0); Progressbar->setGeometry(10, 10, 180, 30); // Buat slider horizontal // dengan kisaran antara 0 dan 100, dan nilai awal 0 Qslider *Slider = baru Qslider(&jendela); Slider->setorientasi(Qt::Horisontal); Slider->setrange(0, 100); Slider->setValue(0); Slider->setGeometry(10, 40, 180, 30); jendela.menunjukkan(); // koneksi // Koneksi ini menetapkan nilai bilah kemajuan // Sementara nilai slider berubah Qobject::Menghubung(Slider, SINYAL (ValueChanged(int)), Progressbar, Slot (setValue(int))); kembali aplikasi.EXEC(); >
Aspek teknis
Bagian ini dapat dilewati untuk saat ini jika Anda hanya ingin memprogram dengan QT. Ketahuilah bahwa Anda perlu menempatkan SINYAL Dan Slot di sekitar sinyal dan slot saat memanggil koneksi . Jika Anda ingin tahu bagaimana QT bekerja, lebih baik membaca ini.
Objek meta
QT menyediakan a meta-objek sistem. Meta-objek (secara harfiah “di atas objek”) adalah cara untuk mencapai beberapa paradigma pemrograman yang biasanya tidak mungkin dicapai dengan C ++ murni seperti:
- Introspeksi : Kemampuan memeriksa jenis saat run-time
- Panggilan fungsi asinkron
Untuk menggunakan kemampuan meta-objek seperti itu dalam suatu aplikasi, seseorang dapat mensubbelakkan QObject dan menandainya sehingga kompiler meta-object (MOC) dapat menafsirkan dan menerjemahkannya.
Kode yang diproduksi oleh MOC mencakup sinyal dan tanda tangan slot, metode yang digunakan untuk mengambil meta-informasi dari kelas yang ditandai, penanganan properti. Semua informasi ini dapat diakses menggunakan metode berikut:
const QMetaObject * Qobject::metaObject () const
Kelas QMetaObject berisi semua metode yang berhubungan dengan meta-objek.
Makro penting
Makro terpenting adalah Q_Object. Koneksi sinyal-slot dan sintaksnya tidak dapat ditafsirkan oleh kompiler C ++ biasa. MOC disediakan untuk menerjemahkan sintaks QT seperti “Connect”, “Signals”, “Slots”, dll ke dalam sintaks C ++ biasa. Ini dilakukan dengan menentukan Q_Object makro di header yang berisi definisi kelas yang menggunakan sintaks tersebut.
kelas Mywidget : publik Qwidget Q_Object publik: Mywidget(Qwidget *induk = 0); >
Makro penanda lainnya untuk MOC
- sinyal
- Publik / Lindung / Pribadi slot
yang menandai berbagai metode yang perlu diperpanjang.
SINYAL Dan Slot juga dua makro yang sangat penting dan bermanfaat. Saat sinyal dipancarkan, sistem meta-objek digunakan untuk membandingkan tanda tangan sinyal, untuk memeriksa koneksi, dan untuk menemukan slot menggunakan tanda tangannya. Makro ini sebenarnya digunakan untuk mengubah tanda tangan metode yang disediakan menjadi string yang cocok dengan yang disimpan dalam objek meta.
Membuat Sinyal dan Slot Kustom
Bab ini mencakup bagian kedua dari sinyal dan slot: menerapkan sinyal dan slot khusus.
Membuat slot dan sinyal khusus sangat sederhana. Slot seperti metode normal, tetapi dengan dekorasi kecil di sekitar, sementara sinyal membutuhkan sedikit atau tidak ada implementasi sama sekali.
Membuat sinyal dan slot khusus sangat sederhana. Itu dijelaskan oleh daftar periksa berikut:
- menambahkan Q_Object makro
- menambahkan sinyal Bagian, dan Tulis Sinyal Prototipe
- menambahkan slot publik atau slot yang dilindungi atau slot pribadi bagian, dan menulis slot prototipe
- Menerapkan slot sebagai metode normal
- Menetapkan koneksi
Membuat slot khusus
Untuk mengimplementasikan slot, pertama -tama kita harus membuat kelas dapat mengirim sinyal dan memiliki slot (lihat bab sebelumnya). Ini dilakukan dengan mengatur Q_Object Makro dalam deklarasi kelas (sering di header).
Setelah itu, slot harus dinyatakan di bagian yang sesuai, dan diimplementasikan sebagai metode normal.
Akhirnya, slot terhubung ke sinyal.
Membuat sinyal
Adapun slot, pertama -tama kita perlu menambahkan Q_Object makro.
Sinyal juga harus dinyatakan dalam sinyal bagian, dan tidak perlu mereka diterapkan.
Mereka dipancarkan menggunakan memancarkan Kata kunci:
memancarkan MySignal();
Perhatikan bahwa untuk mengirim sinyal yang memiliki parameter, Anda harus melewatinya dalam emisi sinyal:
memancarkan MySignal(FirstParameter, Parameter kedua ..);
Contoh
Membuat slot khusus
Mari kita mulai dengan jendela kita dengan tombol:
#ifndef window_h #define window_h #termasuk kelas Qpushbutton; kelas Jendela : publik Qwidget publik: eksplisit Jendela(Qwidget *induk = 0); pribadi: Qpushbutton *m_button; >; #berakhir jika // window_h
#termasuk "jendela.H" #termasuk Jendela::Jendela(Qwidget *induk) : Qwidget(induk) // atur ukuran jendela setFixedSize(100, 50); // Buat dan posisikan tombol m_button = baru Qpushbutton("Halo Dunia", ini); m_button->setGeometry(10, 10, 80, 30); >
Kami mungkin ingin menghapus koneksi kami sebelumnya yang membuat aplikasi berhenti saat mengklik tombol. Sekarang, kami menginginkannya, saat mengklik tombol, teks diubah. Lebih tepatnya, kami ingin tombolnya bisa diperiksa, Dan itu, ketika diperiksa, itu menampilkan “diperiksa”, dan ketika tidak terkendali, itu mengembalikan “halo dunia”.
Qpushbutton tidak menerapkan slot spesifik seperti itu, jadi kita harus mengimplementasikannya sendiri. Seperti yang dinyatakan sebelumnya, kita harus menambahkan Q_Object makro.
kelas Jendela : publik Qwidget Q_Object publik: eksplisit Jendela(Qwidget *induk = 0); pribadi: Qpushbutton *m_button; >;
Kami juga menambahkan slot khusus kami. Karena kami mencoba bereaksi dari tombol yang sedang diperiksa, dan karena sinyal yang sesuai
ruang kosong Qpushbutton::diklik(bool diperiksa)
Kami mungkin menerapkan slot yang memiliki tanda tangan ini:
ruang kosong Jendela::slotbuttonklicked(bool diperiksa);
Sebagian besar waktu, berdasarkan konvensi, kami menerapkan slot pribadi dan terlindungi dengan mengawali mereka dengan “slot”. Di sini, kami tidak tertarik untuk mengekspos slot ini sebagai fungsi publik, kami dapat menjadikannya pribadi. Header baru kemudian
#ifndef window_h #define window_h #termasuk kelas Qpushbutton; kelas Jendela : publik Qwidget Q_Object publik: eksplisit Jendela(Qwidget *induk = 0); pribadi slot: ruang kosong slotbuttonklicked(bool diperiksa); pribadi: Qpushbutton *m_button; >; #berakhir jika // window_h
Implementasi slot ini
ruang kosong Jendela::slotbuttonklicked(bool diperiksa) jika (diperiksa) m_button->setText("Diperiksa"); > kalau tidak m_button->setText("Halo Dunia"); > >
Kita perlu membuat tombol dapat diperiksa, dan membuat koneksi, kita harus menambahkan kode ini di konstruktor:
m_button->setcheckable(BENAR); Menghubung(m_button, SINYAL (diklik(bool)), ini, Slot (slotbuttonklicked(bool)));
Kode yang dihasilkan kemudian:
#termasuk "jendela.H" #termasuk Jendela::Jendela(Qwidget *induk) : Qwidget(induk) // atur ukuran jendela setFixedSize(100, 50); // Buat dan posisikan tombol m_button = baru Qpushbutton("Halo Dunia", ini); m_button->setGeometry(10, 10, 80, 30); m_button->setcheckable(BENAR); Menghubung(m_button, SINYAL (diklik(bool)), ini, Slot (slotbuttonklicked(bool))); > ruang kosong Jendela::slotbuttonklicked(bool diperiksa) jika (diperiksa) m_button->setText("Diperiksa"); > kalau tidak m_button->setText("Halo Dunia"); > >
Memancarkan sinyal khusus
Berdasarkan contoh sebelumnya, kami ingin menutup aplikasi jika tombol diklik (dicentang atau tidak dicentang) 10 kali. Pertama -tama kita perlu menerapkan penghitung yang akan menghitung jumlah klik. Modifikasi ini mengimplementasikannya:
kelas Jendela : publik Qwidget Q_Object publik: eksplisit Jendela(Qwidget *induk = 0); pribadi slot: ruang kosong slotbuttonklicked(bool diperiksa); pribadi: int m_counter; Qpushbutton *m_button; >;
Jendela::Jendela(Qwidget *induk) : Qwidget(induk) // atur ukuran jendela setFixedSize(100, 50); // Buat dan posisikan tombol m_button = baru Qpushbutton("Halo Dunia", ini); m_button->setGeometry(10, 10, 80, 30); m_button->setcheckable(BENAR); m_counter = 0; Menghubung(m_button, SINYAL (diklik(bool)), ini, Slot (slotbuttonklicked(bool))); > ruang kosong Jendela::slotbuttonklicked(bool diperiksa) jika (diperiksa) m_button->setText("Diperiksa"); > kalau tidak m_button->setText("Halo Dunia"); > m_counter ++; >
Sekarang, kita harus membuat sinyal khusus yang digunakan untuk memberi tahu komponen lain, bahwa penghitung telah mencapai 10. Untuk mendeklarasikan sinyal, kita harus menambahkan a
sinyal
Bagian di header. Kami mungkin juga menyatakan sinyal dengan tanda tangan berikut:
ruang kosong Jendela::Counterreached()
Kelas header kemudian dinyatakan sebagai berikut:
kelas Jendela : publik Qwidget Q_Object publik: eksplisit Jendela(Qwidget *induk = 0); sinyal: ruang kosong Counterreached(); pribadi slot: ruang kosong slotbuttonklicked(bool diperiksa); pribadi: int m_counter; Qpushbutton *m_button; >;
Bahkan jika sinyal dinyatakan sebagai metode, tidak perlu mengimplementasikannya. Kompiler meta-objek digunakan untuk melakukan ini.
Sekarang kita perlu memancarkan sinyal saat konter mencapai 10. Itu hanya dilakukan di slot:
ruang kosong Jendela::slotbuttonklicked(bool diperiksa) jika (diperiksa) m_button->setText("Diperiksa"); > kalau tidak m_button->setText("Halo Dunia"); > m_counter ++; jika (m_counter == 10) memancarkan Counterreached(); > >
Kita perlu menulis kata kunci memancarkan untuk mengirim sinyal.
Menghubungkan sinyal yang baru dibuat ke slot berhenti dilakukan seperti biasa:
Menghubung(ini, SINYAL (Counterreached()), Qapplication::contoh(), Slot (berhenti()));
Kode terakhirnya adalah:
#ifndef window_h #define window_h #termasuk kelas Qpushbutton; kelas Jendela : publik Qwidget Q_Object publik: eksplisit Jendela(Qwidget *induk = 0); sinyal: ruang kosong Counterreached(); pribadi slot: ruang kosong slotbuttonklicked(bool diperiksa); pribadi: int m_counter; Qpushbutton *m_button; >; #berakhir jika // window_h
#termasuk "jendela.H" #termasuk #termasuk Jendela::Jendela(Qwidget *induk) : Qwidget(induk) // atur ukuran jendela setFixedSize(100, 50); // Buat dan posisikan tombol m_button = baru Qpushbutton("Halo Dunia", ini); m_button->setGeometry(10, 10, 80, 30); m_button->setcheckable(BENAR); m_counter = 0; Menghubung(m_button, SINYAL (diklik(bool)), ini, Slot (slotbuttonklicked(bool))); Menghubung(ini, SINYAL (Counterreached()), Qapplication::contoh(), Slot (berhenti())); > ruang kosong Jendela::slotbuttonklicked(bool diperiksa) jika (diperiksa) m_button->setText("Diperiksa"); > kalau tidak m_button->setText("Halo Dunia"); > m_counter ++; jika (m_counter == 10) memancarkan Counterreached(); > >
Dan Anda dapat mencoba dan memeriksanya setelah mengklik tombol sepuluh kali, aplikasi akan berhenti.
Penyelesaian masalah
Saat menyusun program Anda, terutama saat Anda menambahkan Macro Q_Object, Anda mungkin memiliki kesalahan kompilasi ini.
utama.CPP:(.teks._Zn6Windowd2ev[_Zn6Windowd5ev]+0x3): belum diartikan referensi ke `vtable untuk Jendela'
Ini karena kompiler meta-objek yang tidak dijalankan pada kelas yang seharusnya memiliki meta-objek. Anda harus Rerun Qmake, dengan melakukan build> run qmake.
Widget
Tombol radio adalah komponen GUI standar. Sering digunakan untuk membuat pilihan unik dari daftar. Di QT, Qradiobutton digunakan untuk membuat tombol radio.
Berkat warisan yang bagus, qradiobutton berperilaku seperti qpushbutton. Semua sifat qpushbutton juga sama di Qradiobutton, dan segala sesuatu yang dipelajari di bab kedua dapat digunakan kembali di sini.
Secara default, qradiobuttons tidak dikelompokkan, sehingga banyak dari mereka dapat diperiksa pada saat yang sama. Untuk memiliki perilaku “eksklusif” dari banyak tombol radio, kita perlu menggunakan qbuttongroup . Kelas ini dapat digunakan seperti ini: kami mengalokasikan grup tombol baru dan melampirkannya ke objek induk. Perhatikan bahwa objek induk mungkin adalah MainWindow, atau “This”:
Qbuttongroup *buttongroup = baru Qbuttongroup(obyek); // Tambahkan tombol di grup tombol buttongroup->addbutton(Button1); buttongroup->addbutton(Button2); buttongroup->addbutton(Button3); .
Yang kami inginkan adalah membuat pemetik menu. Di jendela, daftar pelat lezat harus ditampilkan dengan tombol radio, dan tombol tekan yang digunakan untuk memilih pelat yang dipilih harus ditampilkan.
Jelas, tidak ada yang akan terjadi (sekarang) saat tombol diklik.
Sinyal dan slot
Berikut adalah contoh tentang sinyal dan slot. Kami akan menulis aplikasi dengan dua tombol. Tombol pertama harus menampilkan informasi tentang QT.
Kami memberi Anda kode berikut untuk diselesaikan:
#termasuk #termasuk int utama(int argc, arang **argv) Qapplication aplikasi (argc, argv); Qwidget jendela; jendela.setFixedSize(100, 80); Qpushbutton *ButtonInfo = baru Qpushbutton("Info", &jendela); ButtonInfo->setGeometry(10, 10, 80, 30); Qpushbutton *Buttonquit = baru Qpushbutton("Berhenti", &jendela); Buttonquit->setGeometry(10, 40, 80, 30); jendela.menunjukkan(); // Tambahkan kode Anda di sini kembali aplikasi.EXEC(); >
Untuk menampilkan informasi tentang QT, Anda harus menggunakan metode berikut
ruang kosong Qapplication::tentangqt();
Anda juga dapat menambahkan ikon pada tombol, atau mengubah ukurannya. Jelas, tombol “berhenti” harus lebih penting, jadi mengapa tidak membuatnya lebih besar?
Tapi kami sangat menyarankan Anda mencoba dan mencari tahu sendiri bagaimana menyelesaikan latihan ini.
QT untuk pemula – menemukan informasi dalam dokumentasi
Dokumentasi QT adalah informasi yang sangat berharga. Itu adalah tempat untuk menemukan semuanya terkait dengan Qt. Tapi, dokumentasi QT bukan tutorial tentang cara menggunakan QT. Ini adalah kumpulan semua informasi yang terkait dengan kelas, serta beberapa contoh. Tujuan bab ini adalah untuk memperkenalkan Anda pada dokumentasi sebagai dasar untuk pemrograman dengan QT.
Di mana menemukan dokumentasinya
Sumber dokumentasi terbaik adalah di internet, di jaringan pengembang ini:
Ini memberikan dokumen lengkap, serta beberapa dokumen, yang dapat ditambahkan pengguna. Dokumen ini memberikan lebih banyak contoh dan menyoroti beberapa poin rumit. Dokumentasi online juga memiliki mesin pencari yang cukup kuat dan juga berisi semua dokumentasi untuk semua versi QT.
Sementara versi online membutuhkan koneksi internet, docnotes masih tersedia. Jika QTSDK diinstal dengan benar, dokumentasi yang cocok dengan versi QT saat ini seharusnya telah diinstal, dan Membantu Bagian Qtcreator tidak boleh kosong. Anda juga bisa menggunakan Qt asisten, itu adalah browser Doc mandiri.
Bagian penting dari dokumentasi
Jika Anda menjalankan penampil dokumentasi offline, baik di QT Creator, atau Asisten QT, Anda akan menemukan dalam ringkasan bahwa ada dokumentasi untuk berbagai komponen QT SDK.
- Dokumentasi Asisten QT
- Dokumentasi Desainer QT
- Dokumentasi Linguist QT
- Dokumentasi Qmake
- Dokumentasi Referensi QT
Komponen yang paling penting adalah, tentu saja, dokumentasi referensi QT.
Dokumentasi QT memberikan pengenalan banyak komponen yang bagus, dan juga dokumentasi untuk semua kelas di QT. Daftar ini terdaftar di halaman semua kelas. Halaman menarik lainnya adalah halaman yang mencantumkan semua modul. Halaman ini memberikan informasi tentang berbagai komponen di QT.
Dalam tutorial ini, kami sebagian besar akan menggunakan modul ini
Fungsi pencarian juga cukup penting. Jika Anda mengetahui kelas yang akan digunakan, dan ingin menemukan dokumentasi, Anda dapat mengetikkan nama kelas ini di bidang pencarian (online), atau di filter di indeks (offline). Anda juga dapat mencari metode dan enumerasi di bidang ini.
Jelajahi dokumentasi kelas
Dokumentasi kelas selalu diatur dengan cara yang sama:
- Nama dan deskripsi singkat dari kelas
- Warisan
- Pencacahan
- Properti
- Metode publik
- Slot publik
- Sinyal
- Metode yang dilindungi
Mari kita ambil kelas QtextEdit sebagai contoh.
Apakah QT memiliki antarmuka C?
Saya telah menemukan jawaban yang bertentangan di web – ada yang mengatakan itu, ada yang mengatakan tidak. Saya juga tidak dapat menemukan detail dalam dokumentasi QT resmi. Begitu juga qt memiliki binding c atau tidak?
Ditanya 13 Nov 2009 pukul 10:53
6.041 11 11 Lencana Emas 48 48 Lencana Perak 50 50 Lencana Perunggu
7 Jawaban 7
Jawaban Singkat: Tidak.
Jika Anda membutuhkan toolkit GUI yang komprehensif untuk C, Anda dapat menggunakan GTK+.
Untuk menggunakan QT, Anda harus memiliki kompiler C ++. Tetapi itu tidak berarti bahwa “logika aplikasi” Anda tidak dapat ditulis dalam C, dikompilasi dengan kompiler C dan dikaitkan dengan hati -hati ke bagian C ++ (GUI dengan QT). Logika aplikasi ini dapat bersifat generik, dapat ditautkan ke executable lainnya (murni-C, campuran C/C ++, dll.) Semuanya tergantung pada apa yang Anda butuhkan.
QT sangat bagus untuk C ++, dan itu adalah alasan yang bagus untuk memutuskan menggunakan C ++ untuk proyek tertentu, bahkan jika Anda masih ingin menyimpan bagian di C.