Qt C ++ kullanıyor mu
Qt çerçevesi
QT Essentials, QT’nin temelini tüm platformlarda tanımlayın. Bunlar, desteklenen tüm geliştirme platformlarında ve test edilen hedef platformlarda mevcuttur.
Özet:
1. QT çerçevesi, uygulama geliştirmeyi basitleştiren kapsamlı bir C ++ kütüphane sınıfları setidir.
2. QT, yüksek çalışma zamanı performansı ve küçük bir ayak izi ile son derece okunabilir, korunabilir ve yeniden kullanılabilir kod üretir.
3. QT, geliştiricilerin birden çok platform için uygulamalar oluşturmasına olanak tanıyan platformlar arasıdır.
4. QT Core, Qt GUI, QT multimedia, Qt Network, Qt Quick ve Qt SQL gibi QT temelleri, tüm platformlarda QT’nin temelini oluşturur.
5. QT ayrıca QT OpenGL, QT Wayland Compositor, QT Sensörleri, QT WebView, QT Güvenli Oluşturucu ve QT SCXML gibi eklentiler sağlar.
6. QT çerçevesi, potansiyel güvenlik açığı tehditlerinin ve güvenlik endişelerinin ele alınmasına öncelik verir.
7. Geliştiriciler QT kullanmadan önce C ++ hakkında önceden bilgi sahibi olmalıdır.
8. QT öğretici serisi, C ++ Hatırlatma, QT’ye giriş, QT Creator özellikleri, pencereler ve düğmeler oluşturma, QT sınıfı hiyerarşisi ve daha fazlası gibi konuları kapsar.
9. Gözlemci deseni, sinyaller ve yuvalar ve aktarma bilgileri, öğretici serisinde yer alan gelişmiş özelliklerden bazılarıdır.
Sorular:
- Qt C kullanıyor mu++?
Evet, QT öncelikle C ++ ile yazılmıştır ve uygulama geliştirme için bir dizi C ++ kütüphane sınıfı sağlar. - QT temelleri nelerdir?
QT Essentials, QT’nin temelini oluşturur ve QT Core, QT GUI, QT Multimedya, Qt Network, Qt Quick ve Qt SQL gibi modülleri içerir. - Bazı QT eklentileri nelerdir?
Bazı QT eklentileri arasında QT OpenGL, QT Wayland Compositor, QT Sensörleri, QT WebView, QT Güvenli Oluşturucu ve QT SCXML. - QT güvenliği nasıl önceliklendirir?
QT Grubu, potansiyel güvenlik açıklarını ve güvenlik endişelerini aktif olarak ele alır ve QT proje güvenlik politikasında belirtilen bir güvenlik politikasını izler. - QT kullanmak için hangi bilgi gereklidir??
Geliştiriciler QT ile başlamadan önce C ++ bilgisine sahip olmalıdır. - QT öğretici serisinde hangi konular ele alınmaktadır?
Öğretici Serisi, bir C ++ hatırlatıcısı, QT’ye giriş, QT Creator özellikleri, pencereler ve düğmeler oluşturma, QT sınıfı hiyerarşisi ve daha fazlası gibi konuları kapsar. - Öğretici Serisinde Hangi Gelişmiş Özellikler Kapsanıyor??
Öğretici serisi, gözlemci deseni, sinyaller ve yuvalar gibi gelişmiş özellikleri kapsar ve bilgileri iletme. - QT çapraz platform mu?
Evet, QT çapraz platformdur ve geliştiricilerin birden fazla platformda çalışan uygulamalar oluşturmasına izin verir. - QT Essential ve Qt eklentilerinin amacı nedir?
QT Essential, QT’nin temelini oluştururken, QT eklentileri belirli görevler için ek işlevsellik sunuyor. - QT Güvenliği Nasıl Sağlar??
QT, güvenlik açığı raporlarını aktif olarak analiz eder ve bunları ele almak için derhal harekete geçer. QT Grubu ayrıca güvenlik kaygıları için ilgili direksiyon gruplarına katılır. - QT kullanmanın bazı faydaları nelerdir?
QT, geliştiricilerin mükemmel çalışma zamanı performansı ile son derece okunabilir ve korunabilir kod yazmalarını sağlar. Ayrıca platformlar arası özellikler sağlar. - QT çerçevesi nedir?
QT çerçevesi, uygulama geliştirmeyi basitleştiren ve modülerlik sağlayan kapsamlı bir C ++ kütüphane sınıflarından oluşur. - Gözlemci deseni nedir?
Gözlemci deseni, özne olarak adlandırılan bir nesnenin, buna bağlı olan gözlemcilerin bir listesini tuttuğu bir tasarım modelidir. Konunun durumu değiştiğinde, tüm gözlemcilerini otomatik olarak güncellemeye bildirir. - Sinyaller ve yuvalar nelerdir?
Sinyaller ve yuvalar, QT’de nesneler arasındaki iletişim için bir mekanizmadır. Sinyaller, belirli olaylar meydana geldiğinde nesneler tarafından yayılır ve yuvalar, sinyalleri almak ve işlemek için bağlanabilen işlevlerdir. - QT’de bilgiler nasıl aktarılabilir??
Bilgiler QT’de sinyaller ve yuvalar kullanılarak aktarılabilir, burada sinyallerin taşındığı ve yuvalar alır ve işler.
Yanıtlar:
1. Qt C kullanıyor mu++?
Evet, QT öncelikle gelişimi için C ++ kullanıyor. Bu, geliştiricilerin QT uygulamalarında C ++ dilinin gücünü ve esnekliğini kullanmalarını sağlar.
2. QT temelleri nelerdir?
QT temelleri, QT’de çerçevenin temelini oluşturan temel modüllerdir. Bunlar arasında QT Core, Qt GUI, QT Multimedya, Qt Network, Qt Quick ve Qt SQL. SQL kullanılarak, grafiksel olmayan sınıflar, grafik kullanıcı arayüz bileşenleri, multimedya desteği, ağ programlama, bildirici uygulama geliştirme ve veritabanı entegrasyonu gibi uygulama geliştirmenin çeşitli yönleri için temel işlevsellik sağlarlar.
3. Bazı QT eklentileri nelerdir?
QT, belirli görevler için ek işlevler sunan çeşitli eklentiler sağlar. QT eklentilerinin bazı örnekleri şunlardır:
- Qt OpenGL: OpenGL desteği için sınıflar. QT GUI modülündeki Qopengl sınıfları lehine kullanımdan kaldırıldı.
- Qt Wayland Compositor: Bir Wayland Compositor geliştirme çerçevesi.
- QT sensörleri: Sensör donanımına erişme ve hareket jest tanımasını etkinleştirme sınıfları.
- Qt WebView: Tam Web Tarayıcı Yığını yerine Platform Anasal API’leri kullanarak bir QML uygulamasında Web İçeriğini Görüntüleyen Bir Modül.
- QT Güvenli Oluşturucu: Fonksiyonel güvenlik sistemlerinde, uyarı göstergeleri gibi güvenlik açısından kritik maddeler oluşturma için bir kullanıcı arayüzü oluşturma bileşeni sağlar.
- QT SCXML: SCXML dosyalarından durum makineleri oluşturmak ve bunları uygulamalara gömmek için sınıflar ve araçlar sunar.
4. QT güvenliği nasıl önceliklendirir?
QT Grubu güvenlik endişelerini ciddiye alır ve potansiyel güvenlik açıklarını ele almak için özel bir yaklaşıma sahiptir. QT açık kaynaklı bir proje olarak geliştirildikçe, güvenlik açığı rapor analizi belirlenmiş personel ve dış katkıda bulunanlar tarafından yapılır. QT Grubu, ilgili direksiyon gruplarına aktif olarak katılır ve güvenlik açığı raporlarını aldıktan sonra derhal harekete geçer. Güvenlik Açığı Raporlarını ele almak için ayrıntılı prosedürler QT Proje Güvenlik Politikasında özetlenmiştir.
5. QT kullanmak için hangi bilgi gereklidir??
QT ile başlamadan önce, C hakkında iyi bir anlayışa sahip olmanız önerilir++. QT, gelişimi için C ++ ‘ı ağır bir şekilde kullanır ve dili sağlam bir şekilde anlamaya sahip olmak, QT çerçevesi ve API’leri ile çalışmayı kolaylaştıracaktır.
6. QT öğretici serisinde hangi konular ele alınmaktadır?
QT öğretici serisi, yeni başlayanların QT uygulama geliştirmeye başlamasına yardımcı olacak çok çeşitli konuları kapsar. Kapsanan konulardan bazıları şunlardır:
- Temelleri yenilemek için bir C ++ hatırlatıcısı
- QT’ye giriş, özellikleri ve platformlar arası özellikler
- QT SDK’yı kurma kılavuzu
- QT Creator ve onun özelliklerine genel bir bakış
- İlk pencereyi oluşturmak ve derleme sürecini anlamak
- Uygulamaya düğmeler gibi etkileşimli öğeler ekleme
- QT sınıfı hiyerarşisini ve qobject ebeveynliği kavramını anlamak
- Qwidget alt sınıfı ve özel widget’lar oluşturma
- Daha fazla okuma kaynakları ve önerileri
7. Öğretici Serisinde Hangi Gelişmiş Özellikler Kapsanıyor??
Temel bilgilere ek olarak, QT öğretici serisi daha gelişmiş konulara girer. Kapsanan gelişmiş özelliklerin bazı örnekleri şunlardır:
- Gözlemci Deseni: Kavramı Keşfetmek ve QT Uygulamalarında Nasıl Uygulanacağı
- Sinyaller ve Yuvalar: Nesneler arasındaki iletişim mekanizmasını anlamak
- Bilgi İletme: Sinyaller ve Yuvalar Kullanarak Uygulamanın Farklı Bölümleri Arasına Bilgi Nasıl Aktarılır
- Sinyallerin ve Yuvaların Özellikleri: Sinyaller ve Yuvalar Mekanizmasının Ek Özellikleri ve Özellikleri
8. QT çapraz platform mu?
Evet, QT platformlar arası bir çerçevedir. Geliştiricilerin uygulamalarını bir kez yazmasına ve Windows, MacOS, Linux, Android ve iOS dahil olmak üzere birden fazla platformda dağıtmasına izin verir. QT, platforma özgü ayrıntıları işleyen soyutlamalar ve API’ler sağlar ve farklı işletim sistemlerinde tutarlı bir şekilde çalışan uygulamaların geliştirilmesini kolaylaştırır.
9. QT Essential ve Qt eklentilerinin amacı nedir?
QT Essentials, uygulama geliştirmede yaygın olarak kullanılan temel işlevsellik ve sınıflar sağlayarak QT çerçevesinin temelini oluşturur. Farklı platformlarda tutarlı ve güvenilir bir geliştirme deneyimi sağlarlar. Öte yandan, QT eklentileri, belirli kullanım durumlarına veya alanlara daha özgü ek modüller ve özellikler sunar. Esasların ötesinde genişletilmiş işlevsellik ve yetenekler sağlarlar.
10. QT Güvenliği Nasıl Sağlar??
QT, ürünlerindeki potansiyel güvenlik açıklarını aktif olarak analiz ederek ve ele alarak güvenliğe proaktif bir yaklaşım benimser. QT grubu ilgili direksiyon gruplarına katılır ve güvenlik açığı raporlarına derhal yanıt verir. Ayrıca, açık kaynaklı bir proje olarak QT, harici katkıda bulunanları, çerçevenin genel güvenliğini artırarak kodu gözden geçirmeye ve analiz etmeye davet eder.
11. QT kullanmanın bazı faydaları nelerdir?
Uygulama geliştirme için QT kullanmanın çeşitli faydaları vardır:
- QT, uygulama geliştirmeyi basitleştiren kapsamlı bir C ++ kütüphane sınıfları seti sağlar, bu da sağlam uygulamalar oluşturmayı daha hızlı ve daha kolay hale getirir.
- QT kullanılarak yazılan kod, son derece okunabilir, korunabilir ve yeniden kullanılabilir, geliştirme çabalarını azaltır ve üretkenliği artırır.
- QT, geliştiricilerin bir uygulamayı bir kez yazmasına ve birden çok platformda dağıtmasına izin veren çapraz platformdur.
- Çerçeve, pürüzsüz ve duyarlı uygulamalar sağlayarak mükemmel çalışma zamanı performansı sunar.
- QT’nin küçük bir ayak izi vardır, yani ortaya çıkan yürütülebilir ürünler kompakt ve verimlidir.
12. QT çerçevesi nedir?
QT Framework, uygulama geliştirme için çok çeşitli işlevsellik sağlayan kapsamlı bir C ++ kütüphane sınıfları koleksiyonudur. Geliştiricilerin yalnızca ihtiyaç duydukları bileşenleri kullanmasına izin veren modüler bir yapı sunar. QT, kullanıcı arayüzü tasarımı, veritabanı entegrasyonu, ağ oluşturma, multimedya ve çok daha fazlası dahil olmak üzere uygulama geliştirmenin çeşitli yönleri için araçlar, API’lar ve soyutlamalar sağlar. Geliştirme sürecini basitleştirmek, kodun yeniden kullanımını teşvik etmek ve platformlar arası uygulama geliştirmeyi etkinleştirmek için tasarlanmıştır.
13. Gözlemci deseni nedir?
Gözlemci deseni, nesneler arasında bire çok iletişime izin veren davranışsal bir tasarım modelidir. Gözlemci modelinde iki ana varlık vardır: konu ve gözlemciler. Konu, gözlemcilerin bir listesini tutar ve durumu değiştiğinde bunları otomatik olarak bilgilendirir. Bu desen, nesneler arasındaki gevşek bağlantıyı teşvik eder ve son derece etkileşimli ve dinamik bir sistem sağlar. QT’de, gözlemci deseni, öznenin sinyaller yaydığı ve gözlemcilerin güncellemeler almak için yuvalarını sinyallere bağladığı sinyaller ve yuvalar kullanılarak uygulanabilir.
14. Sinyaller ve yuvalar nelerdir?
Sinyaller ve yuvalar, QT tarafından nesneler arasında iletişim için sağlanan bir mekanizmadır. Sinyal, belirli bir olayın veya durumun meydana geldiğini belirtmek için yayılabilen Qobject’den türetilmiş bir sınıfın özel bir üye işlevidir. Yuva, almak ve işlemek için bir sinyale bağlanabilen bir üye işlevidir. Sinyaller ve yuvalar, nesneler arasında gevşek bir bağlantı kurmak için kullanılabilir ve birbirlerine sıkıca bağlanmadan iletişim kurmalarına izin verir. Bu, QT uygulamalarının tasarımında modülerliği ve esnekliği teşvik eder.
15. QT’de bilgiler nasıl aktarılabilir??
QT’de, sinyaller ve yuvalar kullanılarak bir uygulamanın farklı bölümleri arasında bilgiler aktarılabilir. Bir sinyal parametreleri tanımlayarak bilgi taşıyabilir ve bir yuva bu bilgileri alabilir ve işleyebilir. Bir sinyal yayıldığında, verilen bilgilerle tüm bağlı yuvalar çağrılır. Bu mekanizma, nesnelerin doğrudan birbirlerine atıfta bulunmadan veri iletişim kurmasına ve alışverişi yaparak, uygulama tasarımında gevşek bağlantıyı ve esnekliği teşvik eder.
Qt çerçevesi
QT Essentials, QT’nin temelini tüm platformlarda tanımlayın. Bunlar, desteklenen tüm geliştirme platformlarında ve test edilen hedef platformlarda mevcuttur.
Qt C kullanıyor mu++
О э э с сне
М з з рарегистрировали подозрительный тик, исходящий из Вашей сий. С п с о ы ы с п п с xм ы с с ы xм ы ы с с о x ыи с с ои от от от оз пе пе от от оз он оны от оны онныы онныы онн вы, а н, а нбн Вы,. Поч yatırıl?
Эта страница отображается в тех случаях, когда автоматическими системами Google регистрируются исходящие из вашей сети запросы, которые нарушают Условия использования. Сраница перестанет отображаться после того, как эи запросы прекратяттся. До эого момента дл Ekim ил исползования служб Google нобходим çar.
Источником запросов может служить вредоносное ПО, подключаемые модули браузера или скрипт, настроенный на автоматических рассылку запросов. Если вы используете общий доступ в Интернет, проблема может быть с компьютером с таким же IP-адресом, как у вас. Обратитесь к своемtern. Подробнее.
Проверка по со может luV пе появляться, ео е Вводия, оожо Вы воде сн ыыыые ае iri ае ае iri ае ае iri пе ае iri ае ае iri пе ае iri пе ае iri пе ае iri пе ае ае ае ае iri пе аотототыыыыыыыыыыыететет ]p anauma аете keluma емами, или же водите запросы очень часто.
Qt çerçevesi
QT Framework, kapsamlı bir sezgisel ve modülerleştirilmiş C ++ kütüphane sınıfları seti içerir ve uygulama geliştirmenizi basitleştirmek için API’lerle yüklenir. QT, yüksek çalışma zamanı performansı ve küçük ayak izi ile son derece okunabilir, kolayca korunabilir ve yeniden kullanılabilir kod üretir-ve çapraz platform.
Qt Essentials
Gerçek çapraz platformları mümkün kılmak
QT Essentials, QT’nin temelini tüm platformlarda tanımlayın. Bunlar, desteklenen tüm geliştirme platformlarında ve test edilen hedef platformlarda mevcuttur.
Qt çekirdeği
Diğer modüller tarafından kullanılan temel büyük olmayan sınıflar.
Qt GUI
Grafik kullanıcı arayüz bileşenleri için temel sınıflar. OpenGL’yi içerir.
Qt multimedya
Ses, video, radyo ve kamera işlevselliği için sınıflar.
Qt ağı
Ağ programlamasını daha kolay ve daha taşınabilir hale getirecek sınıflar.
Qt Hızlı
Özel kullanıcı arayüzleri ile son derece dinamik uygulamalar oluşturmak için bildirici bir çerçeve.
Qt SQL
SQL kullanarak veritabanı entegrasyonu için sınıflar.
Qt eklentileri
Doğru eklentiler
Doğru görev için
QT Essentials, QT’nin temelini tüm platformlarda tanımlayın. Bunlar, desteklenen tüm geliştirme platformlarında ve test edilen hedef platformlarda mevcuttur.
Qt Opengl
OpenGL Destek Sınıfları. QT GUI modülündeki Qopengl sınıfları lehine kullanımdan kaldırıldı.
Qt Wayland Compositor
Bir Wayland Bestecisi geliştirmek için bir çerçeve sağlar.
QT sensörleri
Sensör Donanım ve Hareket Hareketi Tanıma Erişim.
Qt WebView
Tam bir web tarayıcı yığını eklemeye gerek kalmadan, platformun doğal API’lerini kullanarak bir QML uygulamasındaki web içeriğini görüntüler.
Qt Güvenli Oluşturucu
İşlevsel güvenlik sistemlerinde uyarı göstergeleri gibi güvenlik açısından kritik öğeleri oluşturmak için kullanılabilecek bir kullanıcı arayüzü oluşturma bileşeni sağlar.
Qt SCXML
SCXML dosyalarından durum makineleri oluşturmak ve bunları uygulamalara gömmek için sınıflar ve araçlar sağlar.
Güvenlik endişelerinin ele alınması için QT çerçeve uygulamaları
QT Grubu, ürünlerindeki potansiyel güvenlik açığı tehditlerinin ve güvenlik endişelerinin ele alınmasına öncelik verir. Geniş platformlar arası uygulanabilirliği ve kapsamlı API’si ile QT çerçevesi, çeşitli cephelerde siber risklere karşı hassastır. Ayrıca QT, belirlenmiş personel ve dış katkıda bulunanlar tarafından güvenlik açığı raporu analizi gerektiren açık kaynaklı bir proje olarak geliştirilmiştir. Kuruluşundan bu yana, QT grubu ilgili direksiyon gruplarına aktif olarak katılır ve güvenlik açığı raporları üzerine derhal harekete geçer. Güvenlik Açığı Raporları, QT Proje Güvenlik Politikasında belirtilen belirli prosedürlere tabidir.
Yeni başlayanlar için QT
Uyarı : Başlamadan önce C ++ hakkında biraz bilgi sahibi olduğunuzdan emin olun!
Söz : Bu öğretici serisi hedef esas olarak qt4. Bu öğreticilerin çoğu QT5 için de geçerli olsa bile, QT5 örneği ayrı bir kısımda tartışılmaktadır.
İçerik
- 1 C ++ Hatırlatma
- 2 QT’ye Giriş
- 3 QT SDK yükleme
- 4 QT Creator özellikleri
- 5 İlk penceremiz
- 6 Bir QT programı nasıl derlenir
- 7 Güzel Bir Düğme
- 8 Qt sınıf hiyerarşisi
- 9 Ebeveynlik Sistemi
- 10 Alt Sınıfı Qwidget
- 11 Daha Fazla Okuma
- 12 Gözlemci deseni
- 13 sinyal ve yuva
- 14 Bilgi İletme
- Sinyallerin ve yuvaların 15 özelliği
- 16 Örnek
- 16.1 bir etkinliğe yanıt vermek
- 21.1 Özel Yuvalar Oluşturma
- 21.2 Sinyal Oluşturma
- 21.3 Örnek
C ++ Hatırlatma
imza bir yöntem veya işlev sadece onun prototipidir. Bir yöntemi veya işlevi tamamen tanımlar. İade edilen türü, yöntemin/işlevin adını (sınıf adı dahil) ve türler dahil parametreleri içerir.
Tip Myobject::myfonksiyon( Type1 param1, Tip 2 *param2, const Type3 & ¶m3 );
Qt için yeni? Nasıl başlayacağınızı bilmiyorum? O zaman bu wiki sayfası senin için! QT’nin tüm özelliklerini ve özelliklerini sunan adım adım bir öğreticidir. Daha fazla öğrenmek ister misiniz? Qt 5 ve C ++ GUI sınıfları için Qt 6 için C ++ GUI sınıflarımıza göz atın.
QT’ye Giriş
QT (“Cu-tee” değil, “sevimli” olarak telaffuz edilir), CLI uygulamaları oluşturmada da çok yararlı olmasına rağmen, genellikle grafik araç seti olarak kullanılan platformlar arası bir çerçevedir. Üç büyük masaüstü ose ve ayrıca Symbian, Nokia Belle, Meego Harmattan, Meego veya BB10 gibi mobil OSE’lerde ve gömülü cihazlarda çalışır. Android (Ipdeitas) ve iOS için bağlantı noktaları da geliştiriliyor.
QT, etkileyici bir modül koleksiyonuna sahiptir, bu da
- Qtcore, Konteynerler, iş parçacığı yönetimi, etkinlik yönetimi ve çok daha fazlası sağlayan bir temel kütüphane
- Qtgui Ve Qtwidgets, Uygulamaları tasarlamak için birçok grafik bileşen sağlayan masaüstü için bir GUI araç seti.
- Qtnetwork, ağ iletişimi ile başa çıkmak için yararlı bir sınıf kümesi sağlar
- Qtwebkit, QT uygulamasında web sayfalarının ve web uygulamalarının kullanımını etkinleştiren WebKit motoru.
- Qtsql, Kendi sürücülerle genişletilebilir tam özellikli SQL RDBM soyutlama katmanı, ODBC, SQLITE, MySQL ve PostgreSQL desteği kutudan çıktı
- Qtxml, Basit XML Ayrıştırma (SAX) ve DOM desteği
- Qtxmlpatterns, XSLT, XPath, XQuery ve Şema Doğrulama Desteği
Qt SDK yükleme
QT uygulamalarını yazmaya başlamak için QT kütüphaneleri almanız ve isterseniz bir IDE. Kaynaktan inşa edilebilir veya daha iyisi, indirme sayfasından SDK olarak indirilebilir.
Bu SDK, Symbian için Çapraz Derleyiciler ve Nokia N9 gibi birçok özellik içerir. “Özel Kurul” seçerek bunları yüklememeyi seçebilirsiniz. Bu paketleri sakladığınızdan emin olun
- Qmake belgeleri
- Qt belgeleri
- Qt 4.8.1 (masaüstü), Qt 4.8.1 en son sürümdür.
- Qt Yaratıcı
Bu paketler de yararlı olabilir
- Qt örnekleri
- Qt dilbilimci
Symbian / Maemo / Meego için veya QT’nin eski sürümüyle geliştirmek istiyorsanız başka paketleri seçebilirsiniz.
NB : Linux’ta, dağıtımınızın sağladığı paketleri kullanmak daha iyidir. QT Creator neredeyse tüm dağıtımlarda mevcut olmalı ve yükleme kütüphaneler, derleyiciler ve geliştirme başlıkları gibi tüm bağımlılıkları yüklemelidir.
Not: Alternatif bir öğretici için QT Widgets sayfasına başlayan yetkiliye bakın.
Şimdi ilk penceremizi oluşturmaya hazırız. Ve her zamanki gibi olacak, bir Selam Dünya.
Qt Creator özellikleri
İlk GUI uygulamamızı yazmadan önce QT Creator’ı keşfedelim.
Qt Creator, C ++ için başka bir IDE, ancak QT uygulamalarını kodlamak için çok uygundur. Windows’un oluşturulmasını kolaylaştıran, hepsi iyi tasarlanmış bir kullanıcı arayüzüne sarılmış bir DOC tarayıcısı ve “tasarımcı” sağlar. Aynı zamanda mevcut en hızlı IDE’lerden biridir.
İlk Penceremiz
İlk projemizi oluşturarak başlayalım. Boş bir proje olacak, bu yüzden aşağıdakilere devam etmeliyiz: Dosya> Yeni Dosya veya Proje> Diğer Projeler> Boş QT Projesi
Sihirbazı takip edin ve proje klasörünü ve adını seçtikten sonra ve kullanmak için QT sürümünü seçtikten sonra bu sayfaya inmelisiniz
Bu proje dosyası (uzatma .profesyonel). QT, “Makefiles” oluşturmak için bu proje dosyalarını ayrıştıran bir komut satırı aracı kullanıyor, derleyiciler tarafından bir uygulama oluşturmak için kullanılan dosyalar. Bu araca denir qmake. Ancak, QMake hakkında çok fazla uğraşmamalıyız, çünkü Qt Creator işini bizim için yapacak.
Bir proje dosyasında, her zaman yazılması gereken bazı minimal kodlar vardır:
Template = uygulama hedefi = name_of_the_app qt = çekirdek gui büyükthan (qt_major_version, 4): qt += widgets
- ŞABLON oluşturulacak türü açıklar. Bir uygulama, kütüphane veya sadece alt dizinler olabilir.
- HEDEF uygulamanın adı veya kütüphanenin adı.
- Qt Bu projede hangi kütüphanelerin (QT modülleri) kullanıldığını belirtmek için kullanılır. İlk uygulamamız küçük bir GUI olduğundan, Qtcore ve QtGui’ye ihtiyacımız olacak.
Şimdi başvurumuzun giriş noktasını ekleyelim. Dosya> Yeni Dosya veya Proje> C ++> C ++ Kaynak Dosyası İşi Yapmalı.
“Ana” dosyasını adlandırarak sihirbazı bir kez daha takip edin ve işiniz bitti. Proje dosyasında, QT Creator tarafından otomatik olarak yeni bir satır eklendiğini fark edeceksiniz:
Template = uygulama hedefi = name_of_the_app qt = çekirdek gui büyükthan (qt_major_version, 4): qt += widget kaynakları += ana.CPP
Başlıklar ve kaynak dosyaları ile manuel olarak eklenebilir
Başlıklar += first_file.H Second_file.h kaynaklar += first_file.CPP Second_file.CPP
Başlıklar += first_file.H Second_file.h kaynaklar += first_file.CPP Second_file.CPP
Qt Creator’ın sihirbazlarını kullanırsanız, bu otomatik olarak yapılır.
Bir QT uygulamasının minimal kaynak kodu
#katmak int ana(int argc, kargaşa **argv) Qapplication uygulama (argc, argv); geri dönmek uygulama.yürütme(); >
Qapplication çok önemli bir sınıf. Girdi argümanları ile ilgilenir, ancak aynı zamanda birçok şey ve en önemlisi, olay döngüsü. Etkinlik döngüsü, GUI uygulamalarında kullanıcı girişini bekleyen bir döngüdür.
Uygulamayı ararken.Exec () Etkinlik Döngüsü başlatıldı.
Bu uygulamayı derleyelim. Sol alttaki yeşil oku tıklayarak, QT Creator derleyecek ve yürütecektir. Ve ne oldu? Uygulama başlatılmış ve yanıt vermiyor gibi görünüyor. Bu aslında normal. Etkinlik döngüsü çalışıyor ve bir GUI üzerinde fare tıklamaları gibi olayları bekliyor, ancak işlenecek herhangi bir olay sağlamadık, bu yüzden süresiz olarak çalışacak.
Görüntülenecek bir şey ekleyelim.
#katmak #katmak int ana(int argc, kargaşa **argv) Qapplication uygulama (argc, argv); Qpushbutton düğme ("Selam Dünya !"); düğme.göstermek(); geri dönmek uygulama.yürütme(); >
Derleyin ve… işte ! İlk Penceremiz !
Bir QT programı nasıl derlenir
QT Creator, yapı sistemini bizim için çağırma işini yapıyor, ancak QT programlarının nasıl derlendiğini bilmek ilginç olabilir.
Küçük programlar için, her şeyi elle derlemek, nesne dosyaları oluşturmak, sonra bunları bağlamak kolaydır. Ancak daha büyük projeler için, komut satırı kolayca yazmak zorlaşır. Linux’a aşina iseniz, tüm programların yürütülmesi için tüm bu komut satırlarını tanımlayan bir makefile kullanılarak derlendiğini bilirsiniz. Ancak bazı projeler için, bir makeFILE yazmak bile sıkıcı olabilir.
qmake QT ile birlikte gelen derleme sistemi mi ve sizin için bu makefilleri üretiyor (kullanılabilecek başka yapı sistemleri de var, ancak burada bir örnek veriyoruz qmake). Basit bir sözdizimi ile, bir QT programını derlemek için kullanılan makefile üretir. Ama bu onun tek amacı değil. QT, C ++ işlevlerini genişletmek için meta-nesneler kullanır ve Qmake, bu meta-nesne ekstraksiyon aşamasını içeren bir makefil hazırlamaktan sorumludur. Bunu başka bir bölümde göreceksin.
Yani, QT uygulamaları 3 adımda derlenir
- A .profesyonel Dosya derlemek için projeyi tanımlamak için yazılmıştır
- Bir makefil kullanılarak üretilir qmake
- Program kullanılarak oluşturulmuştur yapmak (veya nake veya jom pencerelerde)
Güzel Bir Düğme
Bu bölüm, widget modüllerine genel bir bakış sunmaktadır. Widget özelliklerini, widget’larda kullanılan miras şemasını ve ayrıca ebeveynlik sistemini kapsayacaktır.
Artık düğmemize sahip olduğumuza göre, biraz özelleştirmek isteyebiliriz.
Qt nesnelerinin, alıcılar ve ayarlayıcılar kullanılarak değiştirilebilen birçok öznitelik vardır. QT’de, bir öznitelik çağrılırsa foo, İlişkili Getter ve Setter bu imzalara sahip olacak
T foo() const; geçersiz setfoo(const T);
Aslında QT, bu özellik ve alıcılar ve ayarlayıcıların bu özellik sistemini denilen bir şeye genişletir mülk. Bir mülk, erişilebilen, değiştirilebilen veya sabit olabilen ve bir değişikliği bildirebilen herhangi bir türün değeridir. Mülk sistemi, özellikle üçüncü bölümde (QML) yararlıdır. Şimdilik, aynı şeyi yapmak için “öznitelik” veya “mülk” kullanacağız.
Bir qpushbutton’un birçok özelliği vardır:
Böylece bunları düğmeyi özelleştirmek için kullanabiliriz.
Önce metni değiştirelim ve bir araç ipucu ekleyelim
#katmak #katmak int ana(int argc, kargaşa **argv) Qapplication uygulama (argc, argv); Qpushbutton düğme; düğme.Metin ayarla("Metnim"); düğme.setooltip("Bir Araç İpucu"); düğme.göstermek(); geri dönmek uygulama.yürütme(); >
İşte sonuç:
Yazı tipini de değiştirebiliriz. QT’de, QFont sınıfı ile bir yazı tipi temsil edilir. Belgeler çok fazla bilgi sağlar. Özellikle burada QFont’un yapıcılarından biriyle ilgileniyoruz.
Qfont(const Qstring & & aile, int puan = -1, int ağırlık = -1, bool italik = YANLIŞ)
Yazı tipini değiştirmek için bir QFont sınıfını başlatmalıyız ve setfont kullanarak QPushbutton’a iletmeliyiz . Aşağıdaki snippet, yazı tipini kurye olarak değiştirecektir.
Qfont yazı tipi ("Kurye"); düğme.setfont(yazı tipi);
Bu bölümdeki ilk resimde temsil edilen düğmeyi çoğaltmak için QFont’un yapıcısının diğer parametrelerini deneyebilirsiniz.
Bir simge ayarlamak da çok zor değil. Qicon sınıfı ile bir simge temsil edilir. Ve dosya sisteminde mutlak (veya göreceli) bir yol olması koşuluyla bir simge oluşturabilirsiniz. Bu örnekte mutlak yolu sağlamayı öneririm. Ancak dağıtım hususları için, göreceli yolu veya daha iyisini, kaynak sistemini kullanabilirsiniz.
Qicon simge ("/yol/to/my/simge/simge.PNG "); düğme.setikon(simge);
Linux ve diğer bazı işletim sistemlerinde, bir simge temasından bir simge ayarlamanın uygun bir yolu vardır. Statik yöntem kullanılarak yapılabilir:
Qicon Qicon::antheme ( const Qstring & &isim, const Qicon & &geri çekilmek = Qicon());
Örneğin, bu bölümün başındaki ekran görüntüsünde, Smiley Oxygen KDE simgesi temasından geliyor ve şunları ayarladı:
düğme.setikon(Qicon::antheme("Yüz-Smile"));
Qt sınıf hiyerarşisi
QT, özellikle widget modülünde miras kullanıyor. Aşağıdaki grafik bu miraslardan bazılarını göstermektedir:
Qobject, QT’deki en temel sınıftır. QT’deki sınıfların çoğu bu sınıftan miras alıyor. Qobject, aşağıdaki gibi bazı güçlü özellikler sağlar:
- Nesne adı : Bir dize olarak bir nesneye bir ad ayarlayabilir ve nesneleri adlarla arayabilirsiniz.
- ebeveynlik sistemi (Aşağıdaki bölümde açıklanmıştır)
- sinyaller ve yuvalar (bir sonraki bölümde açıklanmıştır)
- olay yönetimi
Widget’lar olaylara yanıt verebilir ve ebeveynlik sistemi ve sinyaller ve yuvalar mekanizmasını kullanabilir. Tüm widget’lar qobject’ten miras alır. En temel widget qwidget . Qwidget, konum ve boyut, fare imleci, araç ipuçları vb. Gibi bir pencereyi veya bir widget’ı tanımlamak için kullanılan çoğu özelliği içerir.
Söz : QT’de bir widget ayrıca bir pencere olabilir. Önceki bölümde, bir widget olan bir düğme gösterdik, ancak doğrudan bir pencere olarak görünüyor. “Qwindow” sınıfına gerek yok.
Neredeyse tüm grafik unsurlar Qwidget’ten miras alır. Örneğin şunları listeleyebiliriz:
Qpushbutton Qcheckbox Qradiobutton Qframe, metin veya resim görüntüleyen bir kare qlabel görüntüleyen qpushbutton qcheckbox Qradiobutton Qframe
Bu miras, mülk yönetimini kolaylaştırmak için yapılır. Boyut ve imleçler gibi paylaşılan özellikler diğer grafik bileşenlerinde kullanılabilir ve QabstractButton, tüm düğmelerle paylaşılan temel özellikler sağlar.
Ebeveynlik sistemi
Ebeveynlik sistemi, QT’deki nesnelerle uğraşmanın uygun bir yoludur, özellikle widget’lar. Qobject’ten miras alan herhangi bir nesnenin bir ebeveyni ve çocukları olabilir. Bu hiyerarşi ağacı birçok şeyi uygun hale getirir:
- Bir nesne yok edildiğinde, tüm çocukları da yok edilir. Yani, çağrı silmek Bazı durumlarda isteğe bağlı olur.
- Tüm qobjects var findhild Ve Bulgular Belirli bir nesnenin çocuklarını aramak için kullanılabilecek yöntemler.
- Bir QWIDGET’teki alt widget’lar ana widget’ın içinde otomatik olarak görünür.
Bir qpushbutton içinde bir qpushbutton oluşturan aşağıdaki snippet:
#katmak #katmak int ana(int argc, kargaşa **argv) Qapplication uygulama (argc, argv); Qpushbutton Buton 1 ("Ölçek"); Qpushbutton Button2 ("diğer", & &Buton 1); Buton 1.göstermek(); geri dönmek uygulama.yürütme(); >
Ayrıca, uygulama kapalı olduğunda, Buton 1, yığın üzerine tahsis edilen, dağıtılır. Button2’nin ebeveyn olarak düğme1 olduğu için de silinir. Bunu, bir bellek sızıntısı arayarak analiz bölümündeki QT Creator’da bile test edebilirsiniz -.
Bir düğmenin içine bir düğme koymanın açıkça bir yararı yoktur, ancak bu fikre dayanarak, bir kabın içine düğmeleri koymak isteyebiliriz, bu hiçbir şey göstermez. Bu kap basitçe Qwidget .
Bir widget’ın içindeki bir düğmeyi görüntülemek için aşağıdaki kod kullanılır:
#katmak #katmak int ana(int argc, kargaşa **argv) Qapplication uygulama (argc, argv); Qwidget pencere; pencere.SetfixedSize(100, 50); Qpushbutton *düğme = yeni Qpushbutton("Selam Dünya", & &pencere); düğme->setometri(10, 10, 80, 30); pencere.göstermek(); geri dönmek uygulama.yürütme(); >
Kullanarak sabit boyutta bir widget (pencere görevi gören) oluşturduğumuzu unutmayın SetfixedSize. Bu yöntem aşağıdaki imzaya sahiptir:
geçersiz Qwidget::SetfixedSize(int Genişlik, int yükseklik);
Ayrıca düğmeyi kullanarak konumlandırdık setometri. Bu yöntem aşağıdaki imzaya sahiptir:
geçersiz Qwidget::setometri(int X, int y, int Genişlik, int yükseklik);
Alt sınıfı qwidget
Şimdiye kadar, tüm kodlarımızı koyduk ana işlev. Bu, basit örneklerimiz için bir sorun değildi, ancak daha karmaşık uygulamalar için kodumuzu farklı sınıflara bölmek isteyebiliriz. Sık sık yapılan şey, bir pencereyi görüntülemek için kullanılan bir sınıf oluşturmak ve bu pencerede bulunan tüm widget’ları bu sınıfın özellikleri olarak uygulamaktır.
QT Creator’ın içinde, dosya> yeni dosya veya proje> c ++> c ++ sınıfı ile otomatik olarak yeni bir sınıf oluşturabilirsiniz
Sınıfı Qwidget’ten devralın ve aşağıdakilere benzer bir kod almalısınız
#ifndef pencere_h #define window_h #katmak sınıf Pencere : halk Qwidget Q_object halk: açık Pencere(Qwidget *ebeveyn = 0); sinyaller: halk yuvalar: >; #endif // window_h
#katmak "Pencere.H" Pencere::Pencere(Qwidget *ebeveyn) : Qwidget(ebeveyn) <>
QT Creator’ın otomatik olarak bir sınıf şablonu oluşturduğunu görebilirsiniz. Başlıkta bazı yeni unsurlar olduğuna dikkat edin:
- Q_object makro.
- Yeni bir yöntem kategorisi: sinyaller
- Yeni bir yöntem kategorisi: halka açık yuvalar
Tüm bu unsurlar bir sonraki bölümde açıklanacak ve şimdi hiçbirine gerek yok. Pencerenin uygulanması yapıcıda yapılır. Pencerenin boyutunu ve bu pencerenin içerdiği widget’ları ve bunların konumlarını bildirebiliriz. Örneğin, bir düğme içeren önceki pencerenin uygulanması bu şekilde yapılabilir:
#katmak #katmak "Pencere.H" int ana(int argc, kargaşa **argv) Qapplication uygulama (argc, argv); Pencere pencere; pencere.göstermek(); geri dönmek uygulama.yürütme(); >
#ifndef pencere_h #define window_h #katmak sınıf Qpushbutton; sınıf Pencere : halk Qwidget halk: açık Pencere(Qwidget *ebeveyn = 0); özel: Qpushbutton *m_button; >; #endif // window_h
#katmak "Pencere.H" #katmak Pencere::Pencere(Qwidget *ebeveyn) : Qwidget(ebeveyn) // Pencerenin boyutunu ayarlayın SetfixedSize(100, 50); // düğmeyi oluşturun ve konumlandırın m_button = yeni Qpushbutton("Selam Dünya", Bu); m_button->setometri(10, 10, 80, 30); >
M_button’u silmek için bir yıkıcı yazmaya gerek olmadığını lütfen unutmayın . Ebeveynlik sistemi ile, pencere örneği yığının dışındayken, M_Button otomatik olarak silinir.
Daha fazla okuma
Bu wiki sayfasında qpushbutton’a daha iyi bir genel bakış verilmiştir qpushbutton nasıl kullanılır
Gözlemci deseni
Neredeyse tüm UI araç setleri, bir kullanıcı eylemini algılamak ve bu eyleme yanıt vermek için bir mekanizmaya sahiptir. Bazıları kullanıyor geri arama, Diğerleri kullanıyor dinleyiciler, Ama temel olarak, hepsi gözlemci deseninden ilham alıyor.
Gözlemci deseni bir gözlemlenebilir Nesne başkalarını bilgilendirmek istiyor gözlemci Bir durum değişikliği hakkında nesneler. İşte bazı somut örnekler:
- Bir kullanıcı bir düğmeyi tıkladı ve bir menü görüntülenmeli.
- Bir web sayfası yeni yüklemeyi bitirdi ve bir işlem bu yüklü sayfadan bazı bilgileri çıkarmalı.
- Bir kullanıcı öğelerin listesinde kaydırıyor (örneğin bir uygulama mağazasında) ve sonuna ulaştı, bu nedenle daha fazla öğe yüklenmeli.
Gözlemci deseni GUI uygulamalarında her yerde kullanılır ve genellikle bazı kaynak kodlarına yol açar. QT, bu kaynak plakası kodunu kaldırma ve güzel bir temiz sözdizimi sağlama fikriyle oluşturuldu. Sinyal ve yuvalar mekanizması bunu mümkün kılar.
Sinyaller ve yuvalar
QT, gözlemlenebilir nesnelere ve gözlemcilere sahip olmak yerine, iki üst düzey kavram sağlar: sinyaller Ve yuvalar.
- A sinyal genellikle bir durum değişikliğini bildirmek için bir nesnenin gönderebileceği bir mesajdır.
- A yuva bir sinyali kabul eden ve yanıtlayan bir işlevdir.
İşte iyi bilinen QPushbutton sınıfımızdan bazı sinyaller ve yuvalar örnekleri.
Gördüğünüz gibi, isimleri oldukça açık. Bu sinyaller, kullanıcı tıkladığında (basılı basıldığında) gönderilir, düğmeye basıldığında veya basıldığında gönderilir.
İşte farklı sınıflardan bazı yuvalar.
- Qapplication :: quit
- Qwidget :: setenabled
- Qpushbutton :: setText
Bir sinyale yanıt vermek için bir yuva bağlı bir sinyale. Qt, Qobject ::bağlamak. İki makro ile bu şekilde kullanılır Sinyal Ve Yuva .
Fooobjecta *fooa = yeni Fooobjecta(); Fooobjectb *foob = yeni Fooobjectb(); Qobject::bağlamak(fooa, Sinyal (çubuklu()), foob, Yuva (çubuk()));
Bu örnek, Fooobjecta’nın çubuklu bir sinyali olduğunu ve FooobjectB’nin bir baz yuvası olduğunu varsayar.
İki makro’nun içine sinyalin ve yuvanın imzasını yazmalısınız Sinyal Ve Yuva. Bu makroların ne yaptıkları hakkında daha fazla bilgi istiyorsanız, lütfen bu bölümün son bölümünü okuyun.
Söz : Temel olarak, sinyaller ve yuvalar, argümanlara sahip olabilecek veya olmayabilecek yöntemlerdir, ancak asla hiçbir şey döndüren. Bir yöntem olarak bir sinyal kavramı olağandışı olsa da, bir yuva aslında gerçek bir yöntemdir ve her zamanki gibi diğer yöntemlerle veya bir sinyale yanıt verirken çağrılabilir.
Bilgi İletme
Sinyaller ve yuvalar mekanizması, düğmeler tıklamalarına yanıt vermek için yararlıdır, ancak bundan çok daha fazlasını yapabilir. Örneğin, bilgi iletmek için de kullanılabilir. Diyelim ki bir şarkı çalarken, şarkı bitmeden ne kadar zaman kaldığını göstermek için bir ilerleme çubuğu gerekiyor. Bir medya oynatıcının medyanın ilerlemesini kontrol etmek için kullanılan bir sınıfı olabilir. Bu sınıfın bir örneği periyodik olarak bir işaret ilerleme değeri ile sinyal. Bu sinyal, ilerlemeyi görüntülemek için kullanılabilen bir QProgressbar’a bağlanabilir.
İlerlemeyi kontrol etmek için kullanılan varsayımsal sınıf, bu imzaya sahip bir sinyal olabilir:
geçersiz MediaProgressManager::işaret(int milisaniye);
Ve belgelerden, QProgressbar’ın bu yuvaya sahip olduğunu biliyoruz:
geçersiz Qprogressbar::setvalue(int değer);
Sinyalin ve yuvanın aynı tür parametrelere sahip olduğunu, özellikle de türü görebilirsiniz. Aynı tür parametreleri paylaşmayan bir yuvaya bir sinyal bağlarsanız, bağlantı yapıldığında (çalışma zamanında) şöyle bir uyarı alırsınız:
Qobject::bağlamak: Uyumsuz gönderen/alıcı argümanlar
Bunun nedeni, sinyalin parametreleri kullanarak bilgileri yuvaya iletmesidir. Sinyalin ilk parametresi yuvanın birincisine aktarılır ve ikinci, üçüncü ve benzeri için aynı.
Bağlantının kodu şöyle görünecek:
MediaProgressManager *müdür = yeni MediaProgressManager(); Qprogressbar *ilerlemek = yeni Qprogressbar(pencere); Qobject::bağlamak(müdür, Sinyal (işaret(int)), ilerlemek, Yuva (setvalue(int)));
İçinde bir imza vermeniz gerektiğini görebilirsiniz Sinyal Ve Yuva Makro, sinyallerden geçirilen değerlerin türünü sağlayan. İsterseniz değişkenin adını da sağlayabilirsiniz. (Aslında daha da iyidir).
Sinyallerin ve yuvaların özellikleri
- Birkaç yuvaya bir sinyal bağlanabilir
- Birçok sinyal bir yuvaya bağlanabilir
- Bir sinyal bir sinyale bağlanabilir: sinyal aktarma. İlk sinyal gönderilirse ikinci sinyal gönderilir.
Örnekler
Bir etkinliğe yanıt vermek
Düğme uygulamamızı hatırla? Düğmeyi tıklayarak kapatabilmek gibi, bu uygulamayla gerçekten bir şeyler yapmaya çalışalım. Qpushbutton’un tıklanmış sinyal. Ayrıca, QApplication’ın çıkış yapmak uygulamayı kapatan yuva.
Bir düğmeye tıklamak için uygulamayı kapatın, sinyali bağlamalıyız tıklanmış düğme tarafından yayılan çıkış yapmak Bu qapplication örneğinin yuvası. Bunu yapmak için önceki bölümden kodu değiştirebiliriz, ancak bunu yapmadan önce, başka bir sınıftayken QApplication örneğine nasıl erişeceğinizi merak edebilirsiniz. Aslında, oldukça basittir, çünkü qapplication’da, aşağıdaki imza ile statik bir işlev olduğu, onu elde etmek için kullanılan:
Qapplication * Qapplication::misal()
Bu, önceki kodumuzun aşağıdaki değiştirilmesine yol açar:
#katmak "Pencere.H" #katmak #katmak Pencere::Pencere(Qwidget *ebeveyn) : Qwidget(ebeveyn) // Pencerenin boyutunu ayarlayın SetfixedSize(100, 50); // düğmeyi oluşturun ve konumlandırın m_button = yeni Qpushbutton("Selam Dünya", Bu); m_button->setometri(10, 10, 80, 30); // yeni: bağlantı kur bağlamak(m_button, Sinyal (tıklanmış()), Qapplication::misal(), Yuva (çıkış yapmak())); >
Pencerenin içindeki düğme tıklandığında, uygulama çıkacaktır.
Sinyaller ve yuvalarla bilgi iletme
İşte bilgi iletimi için daha basit bir örnek. Bir pencerenin içinde yalnızca bir ilerleme çubuğu ve bir kaydırıcı (QSLIDER tarafından oluşturulan) görüntüler ve kaydırıcı hareket ettirirken, ilerleme çubuğunun değeri çok basit bir bağlantı ile senkronize edilir.
İlginç sinyaller ve yuvalar:
geçersiz Qslider::değersiz(int değer); geçersiz Qprogressbar::setvalue(int değer);
QSLIDER, değer değiştiğinde bir parametre olarak geçirilen yeni değerle değerlenen sinyali otomatik olarak yayar ve QProgressbar’ın yöntem setValue, gördüğümüz gibi, ilerleme çubuğunun değerini ayarlamak için kullanılır.
Bu aşağıdaki koda yol açar:
#katmak #katmak #katmak int ana(int argc, kargaşa **argv) Qapplication uygulama (argc, argv); // bir kap penceresi oluştur Qwidget pencere; pencere.SetfixedSize(200, 80); // bir ilerleme çubuğu oluştur // 0 ile 100 arasındaki aralık ve 0'lık bir başlangıç değeri ile Qprogressbar *ilerleme çubuğu = yeni Qprogressbar(& &pencere); ilerleme çubuğu->setrange(0, 100); ilerleme çubuğu->setvalue(0); ilerleme çubuğu->setometri(10, 10, 180, 30); // Yatay bir kaydırıcı oluşturun // 0 ile 100 arasındaki aralık ve 0'lık bir başlangıç değeri ile Qslider *kaydırıcı = yeni Qslider(& &pencere); kaydırıcı->setorientasyon(Qt::Yatay); kaydırıcı->setrange(0, 100); kaydırıcı->setvalue(0); kaydırıcı->setometri(10, 40, 180, 30); pencere.göstermek(); // Bağlantı // Bu bağlantı, ilerleme çubuğunun değerini ayarladı // kaydırıcının değeri değişirken Qobject::bağlamak(kaydırıcı, Sinyal (değersiz(int)), ilerleme çubuğu, Yuva (setvalue(int))); geri dönmek uygulama.yürütme(); >
Teknik açıdan
Sadece QT ile programlamak istiyorsanız bu bölüm şimdilik atlanabilir. Sadece koyman gerektiğini biliyorum Sinyal Ve Yuva Connect’i çağırırken sinyallerin ve yuvaların etrafında . QT’nin nasıl çalıştığını bilmek istiyorsanız, bunu okumak daha iyidir.
Meta nesne
Qt bir meta nesnesi sistem. Meta-nesne (kelimenin tam anlamıyla “nesne üzerinden”), normalde saf C ++ ile elde edilmesi imkansız olan bazı programlama paradigmalarını elde etmenin bir yoludur:
- İçgözlem : Çalışma zamanında bir türü inceleme yeteneği
- Asenkron işlev çağrıları
Bu tür meta-nesne özelliklerini bir uygulamada kullanmak için, qobject’i alt sınıflandırabilir ve meta-nesne derleyicisinin (MOC) yorumlayabilmesi ve çevirebilmesi için işaretlenebilir.
MOC tarafından üretilen kod, sinyaller ve yuvalar imzaları içerir, bu işaretli sınıflardan meta-bilgi almak için kullanılan yöntemler,. Tüm bu bilgilere aşağıdaki yöntem kullanılarak erişilebilir:
const Qmetaobject * Qobject::metaobject () const
QmetaObject sınıfı, meta-nesnelerle ilgili tüm yöntemleri içerir.
Önemli Makrolar
En önemli makro Q_object. Sinyal yuvası bağlantıları ve sözdizimleri normal bir C ++ derleyicisi tarafından yorumlanamaz. MOC, QT sözdizimini “Connect”, “sinyaller”, “yuvalar” vb. Bu, Q_object Bu sözdizimini kullanan sınıf tanımları içeren başlıktaki makro.
sınıf Mywidget : halk Qwidget Q_object halk: Mywidget(Qwidget *ebeveyn = 0); >
MOC için diğerleri işaretleyici makroları
- sinyaller
- Kamu / korunan / özel yuvalar
genişletilmesi gereken farklı yöntemleri işaret eden.
Sinyal Ve Yuva ayrıca iki çok önemli ve kullanışlı makro. Bir sinyal yayıldığında, sinyalin imzasını karşılaştırmak, bağlantıyı kontrol etmek ve imzayı kullanarak yuvayı bulmak için meta-nesne sistemi kullanılır. Bu makrolar aslında sağlanan yöntem imzasını meta-nesnede depolanan bir dizeye dönüştürmek için kullanılır.
Özel sinyaller ve yuvalar oluşturmak
Bu bölüm sinyallerin ve yuvaların ikinci kısmını kapsar: özel sinyaller ve yuvalar uygulama.
Özel yuvalar ve sinyaller oluşturmak gerçekten basit. Yuvalar normal yöntemler gibidir, ancak çevresinde küçük süslemelerle, sinyallerin çok az veya hiç uygulamaya ihtiyacı yoktur.
Özel sinyaller ve yuvalar oluşturmak çok basit. Aşağıdaki kontrol listesi ile açıklanmıştır:
- eklemek Q_object makro
- eklemek sinyaller Bölüm ve sinyal yazma prototipleri
- eklemek halka açık yuvalar veya Korunan yuvalar veya özel yuvalar bölümler ve yuva prototipleri yazın
- Yuvaları normal yöntemler olarak uygulayın
- Bağlantı kurmak
Özel Yuvalar Oluşturma
Bir yuvayı uygulamak için önce sınıfın sinyal gönderebilmesini ve yuvaları yapabilmemiz gerekir (önceki bölüme bakın). Bu ayarlayarak yapılır Q_object Sınıf bildiriminde makro (genellikle başlıkta).
Bundan sonra, ilgili bölümde bir yuva bildirilmeli ve normal bir yöntem olarak uygulanmalıdır.
Son olarak, yuvalar sinyallere bağlanır.
Sinyaller Oluşturma
Yuvalara gelince, önce eklememiz gerekiyor Q_object makro.
Sinyaller de ilan edilmelidir sinyaller bölüm ve uygulanmasına gerek yok.
Onlar kullanılarak yayılırlar yaymak Anahtar Kelime:
yaymak mysignal();
Parametreleri olan sinyalleri göndermek için bunları sinyal emisyonuna aktarmanız gerektiğini unutmayın:
yaymak mysignal(firstparametre, ikinci parametre …);
Örnek
Özel Yuvalar Oluşturma
Düğme ile penceremizle başlayalım:
#ifndef pencere_h #define window_h #katmak sınıf Qpushbutton; sınıf Pencere : halk Qwidget halk: açık Pencere(Qwidget *ebeveyn = 0); özel: Qpushbutton *m_button; >; #endif // window_h
#katmak "Pencere.H" #katmak Pencere::Pencere(Qwidget *ebeveyn) : Qwidget(ebeveyn) // Pencerenin boyutunu ayarlayın SetfixedSize(100, 50); // düğmeyi oluşturun ve konumlandırın m_button = yeni Qpushbutton("Selam Dünya", Bu); m_button->setometri(10, 10, 80, 30); >
Düğmeyi tıklarken uygulamanın bırakılmasını sağlayan önceki bağlantımızı kaldırmak isteyebiliriz. Şimdi, düğmeye tıklarken metin değiştirilmesini istiyoruz. Daha kesin olarak, düğmenin kontrol, Ve kontrol edildiğinde, “kontrol edildi” ve kontrol edilmediğinde “Merhaba Dünya”.
Qpushbutton böyle bir yuva uygulamıyor, bu yüzden bunu kendi başımıza uygulamalıyız. Daha önce belirtildiği gibi, Q_object makro.
sınıf Pencere : halk Qwidget Q_object halk: açık Pencere(Qwidget *ebeveyn = 0); özel: Qpushbutton *m_button; >;
Ayrıca özel yuvamızı da ekliyoruz. Kontrol edilen düğmeden tepki vermeye çalıştığımız ve karşılık gelen sinyal olduğu için
geçersiz Qpushbutton::tıklanmış(bool kontrol)
Bu imzaya sahip bir yuva uygulayabiliriz:
geçersiz Pencere::slotbuttonclicked(bool kontrol);
Çoğu zaman, kongre gereği, bunları “yuva” ile ön ekleyerek özel ve korunan yuvaları uyguluyoruz. Burada, bu yuvayı kamuya açık bir işlev olarak ortaya çıkarmakla ilgilenmiyoruz, onu özel hale getirebiliriz. Yeni başlık o zaman
#ifndef pencere_h #define window_h #katmak sınıf Qpushbutton; sınıf Pencere : halk Qwidget Q_object halk: açık Pencere(Qwidget *ebeveyn = 0); özel yuvalar: geçersiz slotbuttonclicked(bool kontrol); özel: Qpushbutton *m_button; >; #endif // window_h
Bu yuvanın uygulanması
geçersiz Pencere::slotbuttonclicked(bool kontrol) eğer (kontrol) m_button->Metin ayarla("Kontrol"); > başka m_button->Metin ayarla("Selam Dünya"); > >
Düğmeyi kontrol edilebilir hale getirmemiz ve bağlantıyı kurmamız gerekiyor, bu kodu yapıcıya eklemeliyiz:
m_button->setcheckable(doğru); bağlamak(m_button, Sinyal (tıklanmış(bool)), Bu, Yuva (slotbuttonclicked(bool)));
Ortaya çıkan kod şudur:
#katmak "Pencere.H" #katmak Pencere::Pencere(Qwidget *ebeveyn) : Qwidget(ebeveyn) // Pencerenin boyutunu ayarlayın SetfixedSize(100, 50); // düğmeyi oluşturun ve konumlandırın m_button = yeni Qpushbutton("Selam Dünya", Bu); m_button->setometri(10, 10, 80, 30); m_button->setcheckable(doğru); bağlamak(m_button, Sinyal (tıklanmış(bool)), Bu, Yuva (slotbuttonclicked(bool))); > geçersiz Pencere::slotbuttonclicked(bool kontrol) eğer (kontrol) m_button->Metin ayarla("Kontrol"); > başka m_button->Metin ayarla("Selam Dünya"); > >
Özel sinyaller yaymak
Önceki örneğe dayanarak, düğmeye tıklanırsa (işaretlenir veya işaretlenmemiş) 10 kez uygulamayı kapatmak istiyoruz. Önce tıklama sayısını sayacak bir sayaç uygulamamız gerekiyor. Bu değişiklikler bunu uygular:
sınıf Pencere : halk Qwidget Q_object halk: açık Pencere(Qwidget *ebeveyn = 0); özel yuvalar: geçersiz slotbuttonclicked(bool kontrol); özel: int m_counter; Qpushbutton *m_button; >;
Pencere::Pencere(Qwidget *ebeveyn) : Qwidget(ebeveyn) // Pencerenin boyutunu ayarlayın SetfixedSize(100, 50); // düğmeyi oluşturun ve konumlandırın m_button = yeni Qpushbutton("Selam Dünya", Bu); m_button->setometri(10, 10, 80, 30); m_button->setcheckable(doğru); m_counter = 0; bağlamak(m_button, Sinyal (tıklanmış(bool)), Bu, Yuva (slotbuttonclicked(bool))); > geçersiz Pencere::slotbuttonclicked(bool kontrol) eğer (kontrol) m_button->Metin ayarla("Kontrol"); > başka m_button->Metin ayarla("Selam Dünya"); > m_counter ++; >
Şimdi, diğer bileşenleri bilgilendirmek için kullanılan özel bir sinyal oluşturmalıyız, sayaç 10’a ulaştı. Bir sinyal beyan etmek için bir
sinyaller
başlıktaki bölüm. Ayrıca aşağıdaki imzalı bir sinyal beyan edebiliriz:
geçersiz Pencere::karşıt()
Başlık sınıfı daha sonra aşağıdaki gibi bildirilir:
sınıf Pencere : halk Qwidget Q_object halk: açık Pencere(Qwidget *ebeveyn = 0); sinyaller: geçersiz karşıt(); özel yuvalar: geçersiz slotbuttonclicked(bool kontrol); özel: int m_counter; Qpushbutton *m_button; >;
Sinyal bir yöntem olarak bildirilse bile, onu uygulamaya gerek yok. Bunu yapmak için meta-nesne derleyicisi kullanılır.
Şimdi sayaç 10’a ulaştığında sinyali yaymamız gerekiyor. Sadece yuvada yapılır:
geçersiz Pencere::slotbuttonclicked(bool kontrol) eğer (kontrol) m_button->Metin ayarla("Kontrol"); > başka m_button->Metin ayarla("Selam Dünya"); > m_counter ++; eğer (m_counter == 10) yaymak karşıt(); > >
Anahtar kelimeyi yazmamız gerekiyor yaymak Sinyali göndermek için.
Yeni oluşturulan sinyalin bırakma yuvasına bağlamak her zamanki gibi yapılır:
bağlamak(Bu, Sinyal (karşıt()), Qapplication::misal(), Yuva (çıkış yapmak()));
Son kod:
#ifndef pencere_h #define window_h #katmak sınıf Qpushbutton; sınıf Pencere : halk Qwidget Q_object halk: açık Pencere(Qwidget *ebeveyn = 0); sinyaller: geçersiz karşıt(); özel yuvalar: geçersiz slotbuttonclicked(bool kontrol); özel: int m_counter; Qpushbutton *m_button; >; #endif // window_h
#katmak "Pencere.H" #katmak #katmak Pencere::Pencere(Qwidget *ebeveyn) : Qwidget(ebeveyn) // Pencerenin boyutunu ayarlayın SetfixedSize(100, 50); // düğmeyi oluşturun ve konumlandırın m_button = yeni Qpushbutton("Selam Dünya", Bu); m_button->setometri(10, 10, 80, 30); m_button->setcheckable(doğru); m_counter = 0; bağlamak(m_button, Sinyal (tıklanmış(bool)), Bu, Yuva (slotbuttonclicked(bool))); bağlamak(Bu, Sinyal (karşıt()), Qapplication::misal(), Yuva (çıkış yapmak())); > geçersiz Pencere::slotbuttonclicked(bool kontrol) eğer (kontrol) m_button->Metin ayarla("Kontrol"); > başka m_button->Metin ayarla("Selam Dünya"); > m_counter ++; eğer (m_counter == 10) yaymak karşıt(); > >
Ve düğmeyi on kez tıkladıktan sonra uygulamanın bırakılacağını kontrol edebilir ve kontrol edebilirsiniz.
Sorun giderme
Programınızı derlerken, özellikle Makro Q_Object eklerken, bu derleme hatası olabilir.
ana.CPP:(.metin._Zn6windowd2ev[_Zn6windowd5ev]+0x3): Tanımsız referans ile ``vtable için Pencere'
Bunun nedeni, meta-nesne derleyicisinin meta-nesnesi olması gereken bir sınıfta çalıştırılmamasıdır. Malısın Rerun Qmake, Yaparak> Qmake Run.
Widget’lar
Radyo düğmesi standart bir GUI bileşenidir. Genellikle bir listeden benzersiz bir seçim yapmak için kullanılır. QT’de qradiobutton radyo düğmeleri oluşturmak için kullanılır.
Güzel bir miras sayesinde, Qradiobutton tıpkı bir qpushbutton gibi davranıyor. Qpushbutton’un tüm özellikleri de Qradiobutton’da aynıdır ve ikinci bölümde öğrenilen her şey burada yeniden kullanılabilir.
Varsayılan olarak, qradiobuttons gruplandırılmamıştır, bu nedenle birçoğu aynı anda kontrol edilebilir. Birçok radyo düğmesinin “özel” davranışına sahip olmak için QButtongroup’u kullanmamız gerekiyor . Bu sınıf şu şekilde kullanılabilir: Yeni bir düğme grubu tahsis eder ve bunu üst nesneye ekleriz. Üst nesnenin Mainwindow veya “bu” olabileceğini unutmayın:
Qbuttongroup *butongroup = yeni Qbuttongroup(nesne); // Düğme grubuna düğmeler ekle butongroup->addbutton(Buton 1); butongroup->addbutton(Button2); butongroup->addbutton(Button3); .
İstediğimiz bir menü seçici oluşturmaktır. Bir pencerede, radyo düğmeleri ile nefis plakaların bir listesi görüntülenmeli ve seçilen plakayı seçmek için kullanılan bir basma düğmesi görüntülenmelidir.
Açıkçası, düğmeler tıklandığında hiçbir şey olmayacak (şimdi).
Sinyaller ve yuvalar
İşte sinyaller ve yuvalar hakkında bir örnek. İki düğmeli bir uygulama yazacağız. İlk düğme QT hakkında bilgi görüntülemelidir.
Size tamamlamak için aşağıdaki kodu sağlıyoruz:
#katmak #katmak int ana(int argc, kargaşa **argv) Qapplication uygulama (argc, argv); Qwidget pencere; pencere.SetfixedSize(100, 80); Qpushbutton *buttonfo = yeni Qpushbutton("Bilgi", & &pencere); buttonfo->setometri(10, 10, 80, 30); Qpushbutton *düğme = yeni Qpushbutton("Çıkış yapmak", & &pencere); düğme->setometri(10, 40, 80, 30); pencere.göstermek(); // Kodunuzu buraya ekleyin geri dönmek uygulama.yürütme(); >
QT hakkındaki bilgileri görüntülemek için aşağıdaki yöntemi kullanmalısınız
geçersiz Qapplication::Hakkında();
Düğmelere simgeler ekleyebilir veya bunları yeniden boyutlandırabilirsiniz. Açıkçası, “Çık” düğmesi daha önemli olmalı, neden daha büyük yapmıyorsunuz??
Ama gerçekten bu egzersizleri nasıl çözeceğinizi kendi başınıza anlamanızı öneririz.
Yeni başlayanlar için QT – belgelerde bilgi bulmak
QT belgeleri çok değerli bir bilgidir. Bulunacak yer burası her şey QT ile ilgili. Ancak, QT belgeleri QT’nin nasıl kullanılacağına dair bir öğretici değil. Sınıflarla ilgili tüm bilgilerin yanı sıra bazı örneklerin bir koleksiyonudur. Bu bölümün amacı, QT ile programlama için bir temel olarak sizi belgeleri tanıtmaktır.
Belgeleri nerede bulabilirim
En iyi dokümantasyon kaynağı, bu geliştirici ağında internette:
Kullanıcıların ekleyebileceği bazı dokümanların yanı sıra tüm dokümanları sağlar. Bu dokümanlar daha fazla örnek verir ve bazı zor noktaları vurgular. Çevrimiçi dokümantasyonda da oldukça güçlü bir arama motoruna sahiptir ve ayrıca QT’nin tüm sürümleri için tüm belgeleri de içerir.
Çevrimiçi sürüm bir internet bağlantısı gerektirirken, dokümanlar hala mevcuttur. QTSDK doğru şekilde yüklendiyse, QT’nin mevcut sürümüyle eşleşen belgeler yüklenmiş olmalı ve Yardım QtCreator’ın bölümü boş olmamalı. Ayrıca kullanabilirsin Qt asistanı, Bu bağımsız bir doktor tarayıcısı.
Belgelerin önemli bölümleri
Çevrimdışı Dokümantasyon Görüntüleyicisini çalıştırıyorsanız, QT Creator veya QT Asistanı’nda, özette QT SDK’nın farklı bileşenleri için belgeler olduğunu göreceksiniz.
- Qt Asistan Belgeleri
- Qt Tasarımcı Belgeleri
- Qt dilbilim belgeleri
- Qmake belgeleri
- Qt Referans Belgeleri
En önemli bileşen elbette QT referans belgeleri.
QT belgeleri, birçok bileşenin güzel bir tanıtımını ve ayrıca QT’deki tüm sınıfların belgelerini sunar. Bu liste tüm sınıflar sayfasında listelenmiştir. Başka bir ilginç sayfa, tüm modülleri listeleyen sayfadır. Bu sayfa, QT’deki farklı bileşenler hakkında bilgi sağlar.
Bu öğreticide, çoğunlukla bu modülleri kullanacağız
Arama işlevi de oldukça önemlidir. Kullanılacak sınıfı biliyorsanız ve belgeleri bulmak istiyorsanız, bu sınıfın adını arama alanına (çevrimiçi) veya dizindeki filtreye (çevrimdışı) yazabilirsiniz. Bu alanlarda yöntem ve numaralandırmaları da arayabilirsiniz.
Bir sınıfın belgesine göz atın
Sınıf dokümantasyonu her zaman aynı şekilde düzenlenir:
- Sınıfın adı ve kısa açıklaması
- Miras
- Numaralandırma
- Özellikler
- Genel yöntemler
- Halka açık yuvalar
- Sinyaller
- Korunan yöntemler
Örnek olarak Qtextedit sınıfını alalım.
QT’nin bir c arayüzü var mı?
Web’de çelişkili cevaplar buldum – bazıları olduğunu söylüyor, bazıları bunun yapmadığını söylüyor. Resmi QT belgesinde de herhangi bir ayrıntı bulamadım. Qt’un c bağları var mı??
13 Kasım 2009’da 10:53 sordu
6.041 11 11 Altın Rozet 48 48 Gümüş Rozet 50 50 Bronz Rozet
7 Cevaplar 7
Kısa Cevap: Hayır.
C için kapsamlı bir GUI araç setine ihtiyacınız varsa, GTK kullanabilirsiniz+.
Qt kullanmak için mutlak C ++ derleyicisi var. Ancak bu, “uygulama mantığınızın” C’de yazılamayacağı, bir C derleyicisi ile derlenen ve C ++ kısmına dikkatlice bağlandığı anlamına gelmez (QT ile GUI). Bu uygulama mantığı jenerik olabilir, diğer yürütülebilir dosyalara bağlanabilir (Pure-c, karışık c/c ++, vb.) Her şey neye ihtiyacınız olduğuna bağlı.
QT, C ++ için harika ve yine de parçaları C’de tutmak isteseniz bile, belirli bir proje için C ++ kullanmaya karar vermek için iyi bir neden.