Pemrograman dalam antarmuka grafis c. Membuat GUI dengan Qt

Selamat tinggal! Dalam tutorial ini, kami akan membuat aplikasi GUI pertama Anda di MS. Studio visual. Ini akan menjadi semacam "Hello World" untuk aplikasi grafis. Saya akan segera mengatakan itu penggunaan jendela Formulir bukan satu-satunya cara bagi pemrogram C# untuk membuat aplikasi grafis (aplikasi dengan antarmuka pengguna grafis), tetapi ini merupakan tempat yang baik untuk mulai belajar. Jadi, kami meluncurkan Visual Studio.

Diluncurkan? Lalu ke bisnis! Kami pergi ke menu utama dan memilih item "File - New - Project", seperti yang ditunjukkan pada gambar di bawah ini.

Di jendela yang muncul:

  • di sebelah kiri, pilih "Templat - Visual C# - Windows";
  • di area utama, pilih elemen "Aplikasi Windows Forms";
  • di bagian bawah jendela, masukkan nama proyek dan tunjukkan lokasinya di disk.

Secara umum seperti yang ditunjukkan pada gambar di bawah ini.

Apakah Anda menentukan apa yang Anda butuhkan? Kemudian klik tombol "OK". Sekarang Anda akan melihat sesuatu seperti ini (area utama disorot dengan persegi panjang):

Pada gambar di atas, saya memberi label area utama: area desainer (kiri atas), area penjelajah solusi (kanan atas), dan area properti (kanan bawah). Ini adalah area yang paling sering kami kerjakan.

Di area desainer, sekarang ada "formulir" kosong, inilah yang disebut jendela, dalam hal ini, jendela utama program kita. Area properti menampilkan properti elemen yang dipilih dalam perancang, dalam hal ini, formulir kami, tetapi area penjelajah solusi berisi file proyek, termasuk yang terkait dengan formulir (jendela) program. Dan sekarang, mari ubah sedikit bentuk kita, dan jalankan aplikasi pertama ini.

Untuk melakukan ini, pilih formulir di perancang (untuk ini, Anda cukup mengklik kiri pada formulir) dan pergi ke blok properti, di mana kami menemukan baris "Teks" (kata itu adalah teks, kami mencari di kolom kiri), seperti yang ditunjukkan pada gambar di bawah ini.

Properti "Teks" dari bentuk utama aplikasi

Perlu diketahui bahwa kolom kiri menunjukkan nama (nama properti), dan kolom kanan menunjukkan nilainya.

Dalam hal ini, kita berurusan dengan properti teks, dan nilainya ditampilkan di judul jendela, jadi sekarang mari kita letakkan sesuatu milik kita di sana, misalnya, seperti: "Jendela utama", seperti yang ditunjukkan pada gambar di bawah:

Sekarang, Anda dapat membangun proyek dan menjalankannya. Untuk melakukannya, buka menu utama dan pilih "Build - Build Solution". Dan kemudian kami meluncurkan aplikasinya, untuk ini kami memilih item "Debug - Jalankan tanpa debugging" di menu utama. Akibatnya, Anda akan melihat jendela berikut.

Dalam pelajaran berikutnya, kita akan melihat pekerjaan sederhana dengan perancang formulir, dan menyiapkan elemen GUI, dan pelajaran ini berakhir, kami membuat aplikasi grafis pertama, membangunnya, dan meluncurkannya.

Halo semuanya. Dalam pelajaran saya sebelumnya, saya berbicara tentang membuat aplikasi konsol di lingkungan Borland C++ Builder. Mulai dari pelajaran ini, kita akan belajar C++ menggunakan aplikasi grafis sebagai contoh. Siapa yang ingin belajar cara membuat konsol. Bisa baca buku “The Art of Building Console Applications in C++”. Aplikasi pertama kami akan menjadi program yang menampilkan nomor acak. Kita buka borlandyayu, pokoknya jangan buat aplikasi console. Setelah diluncurkan, formulir berikut akan muncul di layar:

Di bagian atas akan ada toolbar:

Di sebelah kanan, Inspektur Objek dan Daftar Formulir:

Komponen (tidak seperti BASIC) sudah dibagi menjadi beberapa tab. Berdasarkan namanya, tidak sulit menebak jenis komponen apa yang ditempatkan pada tab tersebut. Buka tab standar dan tempatkan komponen pada formulir seperti milik saya:

Tombol tersebut akan diberi label Button1. Dia perlu diubah. Di jendela kiri bawah Borland, properti komponen ditampilkan; mereka harus diubah menjadi milik kita:

Pada tombol Caption (Inscription) ubah menjadi Generate

Untuk label Label1, ubah properti Caption menjadi Number

Di Edit1, properti Teks (teks di edit itu sendiri) dihapus begitu saja.

Setelah manipulasi ini, formulir akan terlihat seperti milik saya:

Kami telah selesai dengan gaya visual, omong-omong, sebagian besar properti di Borlyad terlihat seperti BASIC atau Delphi. Bereksperimenlah dengan mereka.

Sekarang mari kita bicara tentang acara. Setiap komponen memiliki event, mereka berisi kode yang akan dieksekusi ketika kondisi tertentu tercapai. Misalnya untuk sebuah tombol, kode pada event Click akan dieksekusi saat kita mengkliknya, dll.

Hari ini kita hanya akan menggunakan event Click. Klik dua kali pada tombol dan masuk ke jendela kode:

Acara Klik untuk tombol dibuat secara otomatis. Kode, seperti aplikasi konsol, ditempatkan di antara kurung kurawal. Kami menulis kode:

Void __fastcall TForm1::Button1Click(TObject *Sender) ( double aaa; //Letakkan nomor yang dihasilkan oleh prosesor di sini Jumlah string; //Tulis nomor yang sama, tetapi direduksi menjadi string acak; //Ini diperlukan agar angka jangan ulangi aaa=acak (34)*43646; //Hasilkan angka apa pun count=FloatToStr (aaa); //Terjemahkan angka menjadi string menggunakan fungsi FloatToString Edit1->Teks=hitung; //Hasilkan variabel string ke jendela teks)

Algoritmanya sederhana, kita mendeklarasikan variabel untuk menyimpan bilangan pecahan di dalamnya, dan variabel untuk bilangan dalam bentuk string. Faktanya adalah bahwa nomor yang dibuat segera tidak dapat ditampilkan di kotak teks (akan ada kesalahan. Teks diharapkan dan nomor diterima), jadi dengan menggunakan fungsi FloatToStr kami menerjemahkan nomor menjadi string dan menampilkannya dalam a kolom tulisan. Untuk keluaran, kita beralih (menggunakan tanda -> (mirip dengan titik di vb)) ke properti teks Edit1 dan menampilkan teks di sana. Itu saja untuk saat ini.

Omong-omong, pertanyaan penimbunan: siapa yang berkembang biak lebih cepat virus komputer, Cina, atau kelinci?


Komentar()

Vitay

artyomka

"acak; //Ini diperlukan agar angka tidak berulang." Saya masih terus mengulang. apa yang harus dilakukan?

Andrey

Ada 2 opsi 1-gunakan "randomize();" atau pada baris 6 memperumit fungsi mis. tambah detik lagi

Andrey

"detik" atau hasil penjumlahan dua bilangan acak semu dibagi detik - semakin banyak faktor, semakin tidak dapat diprediksi jumlahnya

artyomka Alexey(alex13sh)

mengacak
ini agar angka tidak berulang saat program dihidupkan
baik, itu. menyalakan program, tekan tombol beberapa kali
1)5
2)47
3)86
ini saya dalam bilangan bulat
nah kalo program nya di matikan dan di nyalakan lagi maka pada saat tombol ditekan serial akan muncul angka yang sama dengan urutan yang sama
ini tanpa pengacakan, tetapi ini tidak akan dihapus

Dan apa yang diulang dengan cara ini
1)3
2)69
3)1
4)3
5)8
6)1
INI TIDAK BERLAKU UNTUK mengacak
untuk menghindari ini Andrey sudah menjawab))

Begzod

Saya memiliki visual c++.net di komputer saya. Saya tidak dapat menemukan buku teks, kode sumber untuk itu. Bantuan pzhs.

Ali05

Saya melihat di toko buku sebuah buku teks tentang Visual C ++.Net "Nikita Kultin Programming Basics in MicrosoftVisual C++ 2010", itu hanya menunjukkan cara membuat aplikasi grafis di bawah Windows (WinForms).

Peretas keren Nintendo

Aku ingin tahu apa yang "buruk"?

Peretas keren

Dengan tidak adanya kemampuan untuk menyajikan materi dengan benar dan membiasakan Anda, Tuan-tuan, dengan gaya pemrograman yang buruk, ala nama variabel/fungsi yang ditransliterasi.

Edward Peretas keren

Kementerian Pendidikan dan Ilmu Pengetahuan Federasi Rusia

Lembaga Pendidikan Anggaran Negara Federal

pendidikan profesional yang lebih tinggi

"MINYAK NEGARA UFA

UNIVERSITAS TEKNIK"

Departemen Ilmu Komputer dan Teknik Sibernetika

Membuat Aplikasi GUI di Microsoft Visual Studio 2010

Alat bantu pengajaran

untuk laboratorium dan praktikum

dengan mahasiswa jurusan

230100 (09.03.01) "Teknik Informatika dan Komputer"

Alat peraga memberikan informasi teoritis, tugas untuk pekerjaan praktis dan laboratorium dari kursus "Pemrograman".

Manual ini ditujukan kepada guru disiplin, serta siswa jurusan: 230100 "Teknik Informatika dan Komputer".

Disusun oleh: Gabdullina A.A., Art. dosen di jurusan VTIK

Druzhinskaya E.V., Seni. dosen di jurusan VTIK

Peninjau: Filippov V.N., Ph.D., Associate Professor dari Departemen. VTIK.

1. Informasi teoritis 4

1.1. Konsep dasar 4

1.2. Kenalan dengan aplikasi Windows Formulir di Microsoft Visual Studio 2010 4

1.3. Bentuk 7 kontrol

1.5. Kotak Pesan 9 fungsi

1.6. Kontrol Kotak Teks 10

2. Tugas praktis. Pengantar Aplikasi Windows Form di Microsoft Visual Studio 2010 12

2.1. Struktur penilaian untuk pekerjaan yang diselesaikan 12

2.2. Tata cara pelaksanaan kerja praktek 12

3. Pekerjaan laboratorium. Pengembangan Aplikasi pada Microsoft Visual Studio 2010 16

3.1. Urutan laboratorium 16

3.2. Tugas 1. Tabulasi suatu fungsi dan perhitungan nilainya dalam interval yang ditentukan dengan langkah 16 yang diberikan

3.3. Tugas individu 19

3.4. Tugas 2. Memproses array dua dimensi 21

3.5. Tugas individu 27

  1. Informasi teoretis

  1. 1.1. Konsep dasar

Otomasi proses informasi saat ini diwakili, pertama-tama, dengan pengembangan aplikasi perangkat lunak dengan antarmuka pengguna grafis (GUI) yang mengelola aliran data.

Graphical User Interface (GUI) adalah sistem sarana untuk interaksi pengguna dengan perangkat berdasarkan penyajian semua objek sistem dan fungsi yang tersedia bagi pengguna dalam bentuk komponen layar grafis (jendela, tombol, bilah gulir, dll.).

Paling sering, elemen antarmuka dalam GUI diimplementasikan berdasarkan metafora dan menampilkan tujuan dan propertinya, yang memudahkan pengguna yang tidak siap untuk memahami dan menguasai program. Dengan demikian, pekerjaan pengguna dilakukan dengan formulir layar yang berisi objek kontrol dan bilah alat dengan tombol tindakan untuk diproses.

Antarmuka pengguna grafis standar harus memenuhi sejumlah persyaratan:

Memelihara teknologi informasi pekerjaan pengguna dengan produk perangkat lunak;

Fokus pada pengguna akhir yang berkomunikasi dengan program di tingkat interaksi eksternal;

Penuhi prinsip "enam", ketika tidak lebih dari 6 konsep disertakan dalam satu bilah menu, yang masing-masing berisi tidak lebih dari 6 opsi;

    mempertahankan tujuan standar objek grafik dan, jika memungkinkan, lokasinya di layar.

Dalam pemrograman berorientasi objek, kami berurusan dengan kelas dan objek. Objek adalah tipe data komposit: mereka menggabungkan beberapa nilai menjadi satu unit dan memungkinkan kita untuk menulis dan menyimpan nilai tersebut berdasarkan nama. Dengan kata lain, objek adalah kumpulan properti yang tidak terurut, masing-masing dengan nama dan nilai. Nilai bernama yang terkandung dalam suatu objek dapat berupa tipe primitif, seperti angka atau string, atau objek lainnya.

Saat mengembangkan aplikasi non-konsol, konsep utamanya adalah Formulir.

Formulir adalah wadah untuk menghosting kontrol lingkungan desain.

Properti - kemampuan untuk mengakses informasi yang disimpan dalam elemen ini.

Metode adalah serangkaian tindakan yang dapat dilakukan oleh objek.

Suatu peristiwa adalah tindakan yang dikenali oleh suatu objek (misalnya, klik mouse, penekanan tombol), yang responsnya dapat diprogram, mis. respons objek terhadap peristiwa tersebut.

Pembaruan terakhir: 26/05/2019

Di Xamarin.Forms, antarmuka visual terdiri dari halaman. Page adalah objek dari kelas Page , yang menempati seluruh ruang layar. Itulah yang kita lihat di layar perangkat seluler adalah halaman. Sebuah aplikasi dapat memiliki satu atau lebih halaman.

Halaman menerima salah satu wadah tata letak sebagai konten, yang pada gilirannya berisi elemen visual standar seperti tombol dan bidang teks, serta elemen tata letak lainnya.

Mari ambil proyek HelloApp yang dibuat di topik sebelumnya (atau buat yang baru). Secara default, seluruh antarmuka dibuat di kelas App, yang terletak di file App.xaml.cs dan mewakili aplikasi saat ini:

Kode standarnya adalah:

Menggunakan Sistem; menggunakan Xamarin.Forms; menggunakan Xamarin.Forms.Xaml; namespace HelloApp ( Aplikasi kelas parsial publik: Aplikasi ( Aplikasi publik() ( InitializeComponent(); MainPage = new MainPage(); ) dilindungi mengesampingkan void OnStart() ( // Tangani saat aplikasi Anda dimulai ) dilindungi menimpa batal OnSleep() ( / / Tangani saat aplikasi Anda tidur) protected override void OnResume() ( // Tangani saat aplikasi Anda dilanjutkan)))

Kelas App dimulai dengan konstruktor, tempat metode InitializeComponent() pertama kali dipanggil, yang menginisialisasi objek, lalu properti MainPage disetel. Melalui properti ini, kelas Aplikasi ditetapkan halaman rumah aplikasi. Dalam hal ini, ini ditentukan oleh kelas HelloApp.MainPage, yaitu kelas yang ditentukan dalam file MainPage.xaml dan MainPage.xaml.cs.

Tapi jalan ini bukan satu-satunya. Xamarin.Forms memungkinkan Anda membuat antarmuka visual baik menggunakan kode C# atau secara deklaratif menggunakan bahasa xaml, mirip dengan html, atau kombinasi dari pendekatan ini.

Membuat antarmuka dari kode C#

Mari tambahkan kelas C# reguler ke proyek HelloApp, yang akan kita sebut StartPage .

Dan tentukan konten berikut di kelas ini:

Menggunakan Xamarin.Forms; namespace HelloApp ( class StartPage: ContentPage ( public StartPage() ( Label header = new Label() ( Text = "Hello from Xamarin Forms" ); this.Content = header; ) ) )

Kelas ini mewakili sebuah halaman, sehingga mewarisi dari kelas ContentPage. Konstruktor membuat label dengan teks, yang ditetapkan sebagai konten halaman (this.Content = header).

Untuk menunjuk MainPage sebagai halaman awal, ubah kelas Aplikasi:

Menggunakan Xamarin.Forms; namespace HelloApp ( public partial class App: Application ( public App() ( InitializeComponent(); MainPage = new StartPage(); ) protected override void OnStart() ( // Tangani saat aplikasi dimulai ) protected override void OnSleep() ( / / Tangani saat aplikasi Anda tidur) protected override void OnResume() ( // Tangani saat aplikasi Anda dilanjutkan)))

Properti MainPage sekarang mengarah ke StartPage yang baru dibuat.

Perlu juga dicatat bahwa Visual Studio memiliki template siap pakai untuk menambahkan kelas halaman baru dengan kode paling sederhana. Jadi, untuk menambahkan halaman baru, Anda perlu memilih template Halaman Konten (C#) saat menambahkan elemen baru:

Kelas ini ditambahkan ke proyek utama solusi (dalam hal ini adalah HelloApp).

Kelas halaman yang ditambahkan akan memiliki kode berikut:

Menggunakan Sistem; menggunakan System.Collections.Generic; menggunakan System.Linq; menggunakan System.Reflection.Emit; menggunakan Sistem.Teks; menggunakan Xamarin.Forms; namespace HelloApp ( kelas publik Page1: ContentPage ( public Page1() ( Content = new StackLayout ( Children = ( new Label ( Text = "Hello Page" ) ) ); ) ) )

Kelas ini juga akan mewarisi dari kelas ContentPage dasar dan akan memiliki organisasi yang hampir sama dengan kelas MainPage yang dibuat di atas.

Dan juga di kelas aplikasi, kita bisa mengatur halaman ini sebagai halaman awal:

Menggunakan Xamarin.Forms; namespace HelloApp ( Aplikasi kelas parsial publik: Aplikasi ( Aplikasi publik() ( InitializeComponent(); MainPage = Halaman baru1(); ) //........... ) )

5

Saya telah membuat banyak bagian berbeda dari sistem GUI Nintendo DS seperti tombol dan kotak teks dan kotak centang, tetapi saya memerlukan cara untuk menyembunyikan kelas ini dalam satu kelas Gui sehingga saya dapat menggambar semua yang ada di layar sekaligus dan memeriksa semua tombol sekaligus. untuk memeriksa apakah ada tombol yang ditekan. Pertanyaan saya adalah apa cara terbaik untuk mengatur semua kelas (seperti tombol dan kotak teks) ke dalam satu kelas GUI?

Inilah satu cara yang saya pikirkan, tetapi sepertinya tidak benar:

Sunting: Saya menggunakan C++.

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

Kode ini memiliki beberapa masalah, tetapi saya hanya ingin memberi Anda gambaran tentang apa yang saya inginkan.

  • 5 tanggapan
  • Penyortiran:

    Aktivitas

2

Pertanyaan ini sangat mirip dengan yang akan saya posting, hanya pertanyaan saya untuk pemrograman Sony PSP.

Saya telah mencari sesuatu untuk sementara waktu, saya telah berkonsultasi dengan beberapa buku dan VTM, dan sejauh ini ini adalah gambaran kasar tentang sistem ui sederhana.

Kelas uiElement() ( ... virtual void Update() = 0; virtual void Draw() = 0; ... ) kelas uiButton() publik: uiElement ( ... virtual void Update(); virtual void Draw() ; ... ) kelas uiTextbox() publik: uiElement ( ... virtual void Update(); virtual void Draw(); ... ) ... // Elemen ui lainnya kelas uiWindow() ( ... void Update (); batal Draw(); batal AddElement(uiElement * Elemen); batal RemoveElement(uiElement * Elemen); std::list elemen; ... ) void uiWindow::Update() ( ... untuk (daftar ::iterator itu = Elements.begin(); itu != Elements.end(); itu++) itu->Perbarui(); ... ) void uiWindow::Draw() ( ... untuk (daftar ::iterator itu = Elements.begin(); itu != Elements.end(); itu++) itu->Draw(); ...)

prinsipnya adalah pembuatan jendela dan elemen serangan antarmuka pengguna untuk itu, dan panggil metode undian dan perbarui dari fungsi utama yang sesuai.

Belum ada yang berhasil untuk saya, karena saya mengalami masalah dengan kode gambar. Dengan berbagai API di PC dan PSP, saya melihat kode pembungkus untuk OpenGL dan psp gu.

Semoga ini membantu.

0

Salah satu strategi yang berguna untuk diingat adalah pola komposit. Pada level rendah, ini memungkinkan Anda untuk lebih mudah menangani semua objek GUI (dan kumpulan objek) setelah dibuat. Tapi saya tidak tahu apa-apa tentang desain GUI, jadi satu tempat untuk menemukan inspirasi umum ada di kode sumber proyek yang sudah ada. WxWidgets adalah GUI lintas platform dengan antarmuka yang dapat diakses Kode sumber. Semoga berhasil dengan proyek Anda!

0

3

Bagi mereka yang tertarik, ini adalah toolkit GUI open source saya yang berlisensi BSD untuk DS:

Jawaban Subject2k cukup bagus, tetapi saya sangat merekomendasikan memiliki kode yang berisi elemen antarmuka anak di kelas dasar uiElement. Ini adalah pola yang saya ikuti di Woopsie.

Jika kamu Bukan mendukung ini di kelas dasar, Anda akan mengalami masalah serius saat mencoba mengimplementasikan sesuatu yang lebih rumit daripada kotak teks dan tombol. Misalnya:

  • Bilah tabel dapat dimodelkan sebagai beberapa tombol yang dikelompokkan di bawah elemen UI induk tunggal yang memberikan eksklusivitas pilihan bersama;
  • Grup radio (dari waktu ke waktu);
  • Bilah gulir dapat direpresentasikan sebagai elemen penggeser/selokan dan tombol atas/bawah;
  • Daftar gulir dapat direpresentasikan sebagai wadah dan beberapa elemen antarmuka pengguna.

Selain itu, perlu diingat bahwa DS memiliki prosesor 66 MHz dan RAM 4 MB, yang digunakan untuk menyimpan program Anda dan menjalankannya (disk DS dimuat ke dalam RAM sebelum dijalankan). Anda benar-benar harus menganggapnya sebagai sistem tertanam, yang berarti tidak ada STL. Saya menghapus STL dari Woopsi dan berhasil menghemat 0,5MB. Tidak banyak menurut standar desktop, tetapi 1/8 dari total memori DS yang tersedia dikonsumsi oleh sampah STL.

Saya merinci seluruh proses penulisan antarmuka pengguna di blog saya:

Ini mencakup deskripsi dua algoritme yang saya buat untuk menggambar ulang layar, yang merupakan bagian rumit dalam membuat GUI (satu hanya memecah persegi panjang dan mengingat area yang terlihat, dan yang lainnya menggunakan pohon BSP, yang jauh lebih efisien dan lebih mudah untuk mengerti), kiat pengoptimalan, dll. d.



Memuat...
Atas