qt için grafik ortamları ve kitaplıkları indirin. Neden Qt'yi seviyorum ve hepiniz de onu sevmelisiniz. Çıkış düğmesi ekleme

Giriş bölümü: Qt yalnızca GUI öğeleriyle ilgili değildir. Bu çerçeve birbirine bağlı bir sistemdir. Qt nesnelerinin afinitesi, QObject sınıfından kalıtım yoluyla elde edilir. Ve sinyal yuvası sistemi aracılığıyla aralarındaki bağlantılar Bu makale, bu kütüphanenin ana sınıflarını ve kullanışlı özelliklerini açıklayacaktır. QObject Bu, tüm Qt nesneleri için temel sınıftır. Sinyalleri ve yuvaları kullanan herhangi bir sınıf onu devralır. Nesneleri birbirine bağlama yeteneği sağlar. Ayrıca bunun için yararlı işlevsellik sağlar. Bunu tanıtmak...

İlk Qt programı:

Qt: Qt'deki ilk program, bir programcının fikirlerini hayata geçirmenin birçok yolunu içeren güçlü bir araç takımıdır. İlk programdan ustalaşmaya başlayalım Böylece, QtCreator geliştirme ortamına bağlı bir derleyici (örneğin, MinGW) ile parmaklarınızın ucundasınız. Geliştirme ortamında, Diğer proje-> Alt dizinleri olan proje'yi seçin. Başlık: cppstudio. Burada kolaylık olması için siteden alınan tüm uygulamaları saklayacağız. Burada ders_1 adıyla bir QWidget projesi oluşturun ve mainwindows.h, mainwindows.cpp, ... dosyalarını silin.

Giriş - Qt grafik kitaplığı

Qt, ücretsiz, yaygın olarak kullanılan bir C++ grafik kitaplığıdır. Yalnızca grafikleri değil, ağları, veritabanlarını vb. desteklemek için birçok bileşen içerir. Genel bilgi: Kullanımın başlangıcından itibaren programcı, birbirine bağlı bir çerçeve alır. Bu, programın çoğunu yazarken yalnızca yerleşik sınıfları kullanmayı ve belirli bir işletim sistemiyle bağlantıyı neredeyse tamamen bırakmayı mümkün kılar. Bu yaklaşım, geliştiricinin bağımsızlığını ve özgürlüğünü gerçekleştirir. (Birkaç işletim sistemi için programı yeniden yazmaya gerek yoktur. Windows için algoritma derlenebilir ...

24 saatlik yaşamdan sonra, bir karma sızıntısı fark etmeye başladım, bu yüzden makaledeki muhtemelen kabul edilemez sunum tarzı ve öznellik için şimdiden özür dilerim.

Merhaba Habrahabr!

Son zamanlarda, yardım edemedim ama Qt konusunun hub'daki popülaritesine dikkat ettim, ancak yine de yorumlarda, açıkçası yanlış ve anlaşılmaz şeyler söyleyen insanlarla tanışmaya devam ediyor. Bu gönderi ile Qt hakkındaki küçük yanlış anlamaları ortadan kaldırmak ve nedenini anlatmak istedim. Java / Obj-C / .NET'inizden yumuşak ve kabarık Qt'ye geçmelisiniz.

Kesimin altında pek çok izlenim, öznellik ve benim hakkında alçakgönüllü görüşlerim olacak. en harika uygulamaları geliştirmek için çerçeve. Ancak, makalemin en azından teknik olarak yararlı bir anlam kazanması için ilginç şeyler eklemeye çalışacağım. Umarım okurken eğlenir ve keyif alırsınız.

İşte başlıyoruz?

1. C++ API'si

Qt'nin çok uygun bir API'ye sahip olduğu bir sır değil ve daha spesifik olarak, qtbase modülü çoğu günlük görev için yeterli sayıda sınıf içeriyor ( Qt, bir GUI çerçevesinden daha fazlasıdır lol). Üç yıl önceki makalemde STL kap ambalajlarından bahsetmiştim -. Dizelerle çalışma, hata ayıklama çıktısı ve çok daha fazlası için sınıflar da dahildir.

QString meyveler = "elma, muz, portakal, muz"; QStringList meyvelerList = meyveler.split (","); qHata ayıklama ()<< fruitsList; // выведет в консоль [ "apple", "banana", "orange", "banana" ] fruitsList.removeDuplicates(); fruits = fruitsList.join(", "); qDebug() << fruits; // выведет в консоль "apple, banana, orange"
Qt'nin ayrıca XML, veritabanları ( lezzetli-lezzetli MVC mutfakları sisteminin entegrasyonu ile), OpenGL, ses / video çalışması (Phonon), ağ programlama, WebKit2. Bir hastane için, ortalama bir projenin karşı karşıya olduğu görevler - bu mutfak vakaların% 90'ında yeterlidir ve modüller ile sorunlar nadiren ortaya çıkar.

C++'a olan sevgim göz önüne alındığında, Qt'nin sağladığı çeşitli önemsiz şeyler için platformlar arası destekten çok, çok mutluyum. Birkaç kez özellikle anlaşılmaz anları çözmek zorunda kaldım, ama olan bu.

Veshch No. 2. Qt Hızlı

Qt Quick, grafiksel bir kullanıcı arayüzü oluşturmaya yönelik mega anlayışlı bir yaklaşımdır. JavaScript benzeri bir bildirimsel QML kullanarak (nereden geldiğini tahmin edin, lol), uygulamalarda arayüzü prototiplerken yüksek performans elde edebilirsiniz. herhangi zorluklar. Ve komik olan şu ki, böyle bir gidişatla, JavaScript sözdizimini bilen bir tasarımcı bile arayüz prototiplemeyi işleyebilir... Size bir işlevsel kod örneği göstermemiş olsaydım, bunların hepsi boş kelimeler olurdu (daha fazlası Qt Project - tamts'ta bulunabilir).

Import QtQuick 2.0 Rectangle (id: sayfa genişliği: 320; yükseklik: 480 renk: "lightgray" Metin (id: helloText metin: "Merhaba dünya!" Y: 30 çapa.horizontalCenter: page.horizontalCenter font.pointSize: 24; yazı tipi. kalın: true) Izgara (id: colorPicker x: 4; çapalar.bottom: sayfa.bottom; çapalar.bottomMarj: 4 satır: 2; sütunlar: 3; boşluk: 3 Hücre (cellColor: "red"; onClicked: merhabaText.color) = cellColor) Hücre (cellColor: "green"; onClicked: helloText.color = cellColor) Hücre (cellColor: "blue"; onClicked: helloText.color = cellColor) Hücre (cellColor: "sarı"; onClicked: merhabaText.color = cellColor ) Hücre (cellColor: "steelblue"; onClicked: helloText.color = cellColor) Cell (cellColor: "black"; onClicked: helloText.color = cellColor)))

Cell nesnesinin uygulanması son derece önemsizdir ve bu şekilde tanımlanır.

import QtQuick 2.0 Öğesi (id: konteyner özelliği diğer adı cellColor: dikdörtgen.renk sinyali tıklandı (renkli cellColor) genişlik: 40; yükseklik: 25 Dikdörtgen (id: dikdörtgen border.color: "beyaz" çapalar.doldur: ebeveyn) MouseArea (sabitlemeler. fill: parent onClicked: container.clicked (container.cellColor)))

Bu kodda tek bir C++ satırı yok ve gayet iyi çalışıyor. İyi, değil mi? Bundan bir sihirbaz gibi hissettim - ekmek için dükkana gitmek böyle bir uygulamayı perçinlemekten daha kolay. Ancak karmaşık uygulamalarda bir QML eksiktir ve bunu C++ ile birleştiririz. Bu, Qt Software hub'ın birçok makalesinde tartışıldı - örneğin.

3. Veshch No. Toplum

İşte hoş bir ana geldik. Benden bahsetmişken, Qt ile nispeten kısa bir süredir çalışıyorum - sadece 5 yıldır. Qt yıllık etkinlikler düzenliyor - Qt Geliştirici Günleri ve Qt Katkıda Bulunanlar "Zirvesi. Her birine geçen yıl bir kez katıldım ve gerçekten beğendim - hazırlık seviyesi yüksek ve izlenimler harika. Ayrıca Qt ile iletişim kurmak zorunda kaldım " Gaziler " - 10 yıldır zirveye katılan insanlar. Böyle bir projenin büyümesini gözlerimizin önünde görmenin ve tüm gelişimin merkez üssünde olmanın ne kadar güzel olduğunu hayal edebiliyorum - çok lezzetli.

Bu insanlar yeni gelenlere karşı çok hoşgörülü ve onlara iyi davranıyor, böyle harika insanlarla iletişim kurmak benim için çok kolay ve keyifliydi. Qt Projesinde herkesin sorularına cevap alabileceği forumlar var. Komik ama gerçekten öyle çok canlı ve orada gerçekten Qt öğrenme sürecinde ortaya çıkan soruları yanıtlayın.

4. Açık kaynak ve kod incelemesi

Sorets kyuta, esas olarak Digia (com. Support +), KDAB, ICS ve geliştirme meraklıları tarafından açıkça geliştirilmiştir. Her şey Gitorious - tadamts'ta barındırılıyor. Projenin gelişimine katkıda bulunmak için şunları yapmanız gerekir: sıkı kod doğrulama - otomatik (daha önce yazdığım kod stiline uygunluk -) ve insan - kodunuz size güvenmeyen sakallı amcalar tarafından izlenecek ve kodunuzda arka kapılar arayacaktır. Bütün bunlar oldukça karmaşık bir süreç (İnceleme Kurulunda git/revizyon sorunları) ve muhtemelen geçen gün bununla ilgili bir yazı yazacağım.

Bu arada, qtbase ağacında birkaç taahhütüm var, bu yüzden ls'de sorabilirsiniz - soruları cevaplamaya çalışacağım.

Veshch No. 5. Proje geliştirme dinamikleri

Qt, 90'ların sonundan beri uzun yıllardır geliştirilmektedir. Bu süre zarfında Trolltech ve Nokia gibi şirketler, ticari versiyonunu yeterince oynamayı başardılar ve şimdi Digia bunu yapıyor. Ama kesin olan bir şey var ki, proje canlı ve iyi durumda. Birkaç yıl boyunca herkes tasarımı widget'lara yazdı (hepsi QWidget'a dayalı C ++ sınıfları) ve bugün küçük bir çocuk bile bunu yapabilir. Buna paralel olarak en güçlü şeyin aktif olarak geliştiğini söylemeye değmez bence - bugün sadece Qt programcılarını memnun etmeyen Qt Creator!

^ Harikalar yaratabileceğiniz ve bunun için hiçbir şey alamayacağınız harika Qt Creator.

Ne yazık ki, kesin rakamlarım yok, ancak kodun her gün optimize edildiğini ve kod tabanının dikkatlice oluşturulduğunu söylüyorlar - yeni özellikler eklendi ve eski hatalar düzeltildi (bunu zaten birçok kez gördüm). Bütün bunlar çok faydalıdır ve sevinemezler.

Ayrıca, platformlar şu anda aktif olarak geliştirilmektedir. iOS, Android, Windows Phone, onlar için zaten programlar oluşturabilirsiniz!

Sonuç

Sanırım Qt'nin gerçekten harika olduğunu anlıyorsunuz ve makaleyi okuduktan sonra onu benim kadar seviyorsunuz.
Dikkatiniz için teşekkürler!

Herkes KDE'nin Qt kitaplığına dayandığını bilir, ancak herkes bunun ne olduğunu bilmiyor.

Qt, TrollTech'ten grafik kullanıcı arayüzleri (GUI'ler) oluşturmak için platformlar arası bir C++ sınıf kitaplığıdır. Bu kitaplık, yeteneklerin kolayca genişletilmesine ve yeni bileşenlerin oluşturulmasına olanak tanıyan tamamen nesne yönelimlidir. Windows 95/98 / NT / 2000, Linux, Sun Solaris, HP-UX, Digital Unix, IBM AIX, SGI IRIX ve diğerleri gibi çok sayıda platformu destekler. Qt'nin 1996'daki ilk ticari sürümünden bu yana, dünyaca ünlü birkaç yüz uygulama ortaya çıktı. Qt'ye dayalı en ünlü gelişme, birçok kişinin tahmin ettiği gibi KDE olarak adlandırılan X-Windows için bir masaüstü yöneticisidir.

Qt kitaplığının iki sürümü vardır: ücretsiz ve ücretli. Qt Free Edition adlı ücretsiz sürüm, yalnızca Unix / X11 ve açık kaynak geliştirme içindir. Ticari programların geliştirilmesi için Qt Professional Edition amaçlanmıştır.

Bir GUI yazma kitaplığı için nesne yönelimli bir dil mevcut tek araçtır ve C++ standart nesne modeli verimli ve hızlı program geliştirme, sınırsız ölçeklenebilirlik ve hızlı modernizasyon sağlar. Doğal olarak, bu nedenle, kütüphane için temel dil olarak C++ seçilmiştir. Ancak, dilin kendi özelliklerine ek olarak, Qt kitaplığı birkaç iyi özellik ekledi:

  • sinyaller ve yuvalar kullanan nesneler arasında güçlü iletişim mekanizması
  • C++ derleyicisinin desteklemediği nesnelerin özelliklerini oluşturmak için bir mekanizma
  • olaylar ve olay filtreleri için destek
  • uluslararasılaştırmayı desteklemek için dizelerin çevirisi
  • olay odaklı GUI'ler için birçok görevi entegre etmenize olanak tanıyan dahili zamanlayıcılar için destek
  • bir tür aile ağacı olan nesnelerin hiyerarşik ağaçları: "büyük büyükbaba - büyükbaba - baba - oğul", iç etkileşimi "doğal" bir biçimde düzenlemek için tasarlanmıştır
  • Başvurulan nesne silindiğinde otomatik olarak NULL olarak ayarlanan "korumalı" işaretçiler

Tüm bu özellikler özel C++ sınıfları olarak uygulanmaktadır. Kullanıcı arayüzleri için yeni modern gereksinimlerin ortaya çıkması, programlama dilinin sağlayamadığı, ancak yalnızca özel sınıfların oluşturulmasından sonra standart olmayan yeni mekanizmaların ortaya çıkmasını gerektirir.

X-Yabancı

Kaynak referans alınarak Linux.HiTECH.BY web sitesindeki materyallerin kullanımına izin verilir.
Malzemeler GNU / GPL altında dağıtılır.

Doğal olarak, şişeden çıkan çekiç gibi bir yazarım, bu yüzden tanıdıklarınızdan alıntılar görürseniz beni affetmeyin :-)))
Ve makalenin geliştirilmesindeki yardım için uj'ye çok teşekkürler !!! Saygı: - =))
Ve böylece ... hadi gidelim! ...

1. QT nedir?
=================
Qt, yerel API'leri sunucunuzdan çıkarmayı amaçlayan bir çapraz platform kitaplığıdır.
programlar. Qt, çoğu durumda artık büyük bir nesne yönelimli hasat makinesidir.
diğer kütüphaneleri dahil etmeden yapılmasına izin verir.
Her şeyden önce, Qt, grafiksel kullanıcı oluşturmak için harika bir araçtır.
arayüz (GUI). Qt, grafik arayüzler oluşturmayı kolaylaştıran bir tasarımcı içerir
başvurunuz için.
Her platform için derleme dosyaları yazma konusunda endişelenmenize gerek yok, Qt bunu sizin için yapacak.
Kullanılan tüm dosyaların ekleneceği bir proje dosyası ve dosyanın eklenmesi yeterlidir.
derlemeler, qmake yardımcı programına yapılan bir çağrı ile oluşturulabilir (doğal olarak, hedefin kontrolü altında).
platformlar). Kendi başıma, bazen bu dosyanın elle düzenlenmesi gerektiğini ekleyeceğim (ama elbette).
Bu kütüphanenin önemi, en azından bu tür başarılı projelerde kullanılmasıyla ortaya çıkıyor.
Borland C++ Builder 6 ve Opera gibi.

2. Nereden alınır?
================
Kütüphane, bazıları ücretli, bazıları ödenmeyen çeşitli lisanslar altında sağlanır. Altında
X11 pencereleme sistemi yasal olarak her zaman www.trolltech.com adresinde mevcuttur
Qt'nin GPL sürümünü alın (ve elbette yalnızca
ticari olmayan projelerde). Windows daha zor, çünkü en üste göre
TrollTech, bu sistem bir açık kaynak geliştirme arenası değildir. için en son ücretsiz sürüm
Windows - 2.3.0. Ancak becerikli insanlar için bu bir sorun değil, bir eDonkey ağı var ;-) Güncel
an sürüm 3.3.1'dir. Sürüm 4'ün yakında çıkması bekleniyor.

3. Teknik detaylar
=============================
Başlangıçta, Qt kullanıcı arayüzünde "çalıştı". İşte bu yüzden kütüphanenin bu bölümü en çok
kullanılan ve en gelişmişidir. Widget'ları konumlandırmaya ilginç bir yaklaşım (widget - element
GUI, kendisi de dahil olmak üzere pencereye çizilen her şey) - katman sistemi (düzen), bir kabus gibi mutlak konumlandırmayı unutmanıza izin verir. Artık Layout sınıfı, örneğin ana pencere ile ne yaptığınızı izler ve bu pencerenin geometrisindeki değişikliği takiben tüm dahili widget'ları konumlandırır.
Qt'nin ana fikri, nesneler arasındaki ilişkiyi uygulayan sinyal yuvası mekanizmasıdır.
Bu mekanizma, herhangi bir işlem yapmadan kullanmanıza izin veren ön derleme yoluyla uygulanır.
tweaks (Qt ile ilgileniyorsanız, şu anda geri aramaları unutun).
Her Qt nesnesi (yalnızca belirtme çizgileri değil!) Sabit kodlanmış bazı sinyaller üretebilir
kendi sınıfının yapısına entegre edilmiştir. Sinyal, sinyaller özel bölümünde bildirilen bir fonksiyondur.
ve uygulaması ("gövde") yoktur, yalnızca iletilen argümanlar vardır. Yuvalar bir nesnenin sinyaline bağlanabilir (bir sınıfa değil, not edin). Slot sadece bir yöntemdir ve ayrıca özel "slotlar" bölümlerinde de belirtilmiştir. yuvalar
erişilebilir ("genel slotlar" bölümü), korumalı ("korumalı slotlar") ve
gizli ("özel yuvalar"). Özel bağlantı yöntemi kullanılarak yuva sinyale bağlanır.
Küçük bir örnek:

Bağlan (myValueDetector, SIGNAL (ValueChange (Değer a),
myApplicationUpdater, SLOT (onValueChange (Value a))));

Ardından, ValueChange sinyali myValueDetector nesnesi tarafından her "yayıldığında"
myApplicationUpdater'ın onValueChange yuvası çağrılacak.
Artıları - bir sinyale birkaç yuva bağlanabilir.
Eksileri - bir yuva birkaç sinyal için kullanılamaz (örneğin, bir grup düğmeyi işlemek için). VCL / CLX olay sistemiyle karşılaştırın - tam tersi. Sinyal yuvası mekanizmasını kullanmanın küçük bir örneğine bakalım:

Gördüğünüz gibi, kod standart C++'dan "biraz" farklıdır. Bu metin, moc meta-derleyicisinin girişine beslenir, bu ondan zaten standart C++ kodu üretir ve daha sonra herhangi bir derleyici tarafından derlenir. Moc, "onun" u ayırt eder, yani. sinyal yuvası mekanizmasını destekleyen, sınıf bildiriminin en başındaki Q_OBJECT anahtar sözcüğü ile standart olanlardan sınıflar.

Qt kütüphane çekirdeğinin başlıca avantajlarını sıralayalım:
* Unicode ve yerelleştirme için yerleşik destek (çok iyi ve çok iyi uygulanmış, cüret ediyorum
fark etme). Qt4, Unicode'u destekleyen yeni bir yazı tipi oluşturma motoru vaat ediyor.
* güçlü olaylar ve olay filtreleri (bir olay, herhangi bir widget'a gönderilebilen, filtreler kullanılarak tanınan ve uygun şekilde işlenen evrensel bir sinyal gibi bir şeydir. Örneğin, çeşitli tuşlara basmak)
* kolay ve hızlı hale getiren çok işlevli aralık kontrollü zamanlayıcılar
olay odaklı bir GUI'ye birçok farklı iş ekleyin.
* hiyerarşik ve özelleştirilebilir nesne ağaçları, nesnelerin doğaya aitliğini organize etme
yol.
* olduğunda otomatik olarak NULL olan korumalı işaretçiler QGuardedPtr
C ++ 'daki olağan işaretçilerin aksine, karşılık gelen nesnenin imhası, bu
durum "tanımsız işaretçiler" haline gelir.
* Kullanışlı belgeler, Rusça olarak mevcuttur (maalesef bağlantıları bilmiyorum, ancak istek üzerine memnuniyetle gönderebilirim).

Kütüphanenin çekirdeği, bir GUI oluşturmak için her iki sınıfı da içerir (örneğin: bir etiket, bir giriş alanı, bir düğme ve
vb.) ve çeşitli veri depolama yapılarını düzenlemek için tasarlanmış sınıflar (örneğin,
liste), dosyalarla çalışma, ağ oluşturma ve çok daha fazlası. Bazıları
yetenekler ek modüller şeklinde uygulanır:
* Canvas modülü, 2D grafiklerle çalışmak için güçlü bir araç. İlkeyi kullanır
Basit iki boyutlu programlamada şüphesiz faydalı olacak yapılandırma grafikleri
oyunlar ve bunun gibi şeyler. Tuval birkaç "elemandan" oluşur, her eleman temsil edilir
nesne. Çarpışma algılama, hareket gibi bir dizi ilginç özellik de desteklenir (Windows altındaki ücretsiz sürümlerde yoktur: - ((())
eksenler boyunca belirli hızlara sahip nesneler. Bağlantıda daha fazlasını okuyun:
Bağlantı
* Uygulamalarda ağ desteği sağlayan ağ modülü.
* Taşınabilir bir kitaplık kullanarak üç boyutlu grafiklerle çalışmanıza izin veren OpenGL modülü
OpenGL. 2.3.2 sürümünden beri desteklenmektedir.
* Qt uygulamalarından veritabanlarına erişim sağlayan SQL modülü. Bu modül üç seviyeye ayrılmıştır:
kullanıcı (arayüz elemanları), programlı (soyut veritabanı erişimi) ve seviye
sürücüler.
* tablo verilerini görüntülemek için size bir kılavuz sağlayan Tablo modülü. Ağ
çok güçlü ve esnek bir arayüzdür, bununla çalışmak bir kolaylıktır
* SAX2 arayüzünü ve ikinci seviye DOM uygulamasını kullanan XML modülü.

Bu, Qt özelliklerinin tam listesi değildir.

3. Basit bir QT uygulaması nasıl yazılır?
=================================================
Main.cpp dosyasını aşağıdaki içerikle yazalım:

Şimdi bu durum için bir proje dosyası yazalım (simple.pro):

PROJE = basit
ŞABLON = uygulama
YAPILANDIRMA = qt warn_on hata ayıklama
KAYNAKLAR = ana.cpp
HEDEF = basit

Komut satırına şunu yazın:

qmake basit.pro

Ve şimdi sıra make yardımcı programında: uygulama hazır.Çalıştırın, düğme ile pencereyi izleyin.

PySide; -; Java -; - başka.

Qt, onunla yazılan yazılımın, kaynak kodunu değiştirmeden her işletim sistemi için programı derleyerek çoğu modern işletim sisteminde çalışmasına izin verir. GUI öğelerinden ağ oluşturma, veritabanı ve XML sınıflarına kadar uygulama yazılımı geliştirmede ihtiyaç duyabileceğiniz tüm temel sınıfları içerir. Qt tamamen nesne yönelimlidir, kolayca genişletilebilir ve bileşen programlama tekniklerini destekler.

Microsoft Windows, X11 grafik alt sistemli UNIX sistemleri, Android, iOS, Mac OS X, Microsoft Windows CE, QNX, gömülü Linux sistemleri ve S60 platformu için kitaplığın sürümleri vardır. Windows Phone ve Windows RT'ye taşıma devam ediyor. Haiku ve Tizen'e taşıma da devam ediyor.

Yakın zamana kadar, Qt kitaplığı başka bir sürümde dağıtıldı: Qt / Embedded. Bu platform şimdi Qtopia Core olarak yeniden adlandırıldı ve bağımsız bir ürün olarak dağıtılıyor. Qtopia Core, gömülü ve mobil cihazlar (PDA'lar, akıllı telefonlar, vb.) için uygulamalar geliştirmeye yönelik tüm platformlar için temel işlevsellik sağlar.

4.5 sürümünden beri, Qt 3 lisans altında dağıtılmaktadır (lisanstan bağımsız olarak, Qt için kaynak kodu aynıdır):

  • Qt Commercial - özel bir lisansla yazılım geliştirme için, değişiklikleri açıklamadan Qt'nin kendisinin değiştirilmesine izin verir;
  • GNU Genel Kamu Lisansı - GNU Genel Kamu Lisansı koşulları altında dağıtılan açık kaynaklı yazılım geliştirmek için;
  • GNU Kısıtlı Genel Kamu Lisansı - tescilli yazılım geliştirmek için, ancak Qt'yi değiştirmeden.

4.0.0 sürümünden önce yalnızca Qt / Mac, Qt / X11, Qt / Embedded ücretsiz bir lisans altında dağıtılıyordu, ancak 4.0.0'dan başlayarak (Haziran 2005'in sonunda yayınlandı), Qt Yazılımı da "yayınlandı". Qt / Windows. Qt / Windows'un üçüncü taraf ücretsiz sürümlerinin bulunduğuna dikkat edilmelidir.< 4.0.0, сделанные на основе Qt/X11.

1996 yılında kuruluşundan bu yana, Qt kütüphanesi dünya çapında binlerce başarılı projenin temelini oluşturmuştur. Ayrıca Qt, birçok Linux dağıtımıyla birlikte gelen popüler bir masaüstünün temelidir.

Qt'nin diğer kitaplıklardan ayırt edici bir özelliği, kaynak kodunu işlemek için bir ön sistem olan Meta Nesne Derleyicisinin (MOC) kullanılmasıdır (genel olarak, Qt, saf C ++ için değil, özel zarfı için bir kitaplıktır. herhangi bir standart C++ derleyicisi ile sonraki derleme için MOC'yi "çevirir"). MOC, yuvalar ve sinyaller gibi kavramları tanıtarak kitaplıkların gücünü çoğaltmanıza olanak tanır. Ayrıca kodunuzu daha özlü hale getirir. MOC yardımcı programı, Q_OBJECT makrosunu içeren sınıf açıklamaları için C++ başlık dosyalarını arar ve meta-nesne kodunu içeren ek bir C++ kaynak dosyası oluşturur.

Qt, kendi eklentilerinizi oluşturmanıza ve bunları doğrudan görsel düzenleyici panele yerleştirmenize olanak tanır. Pencere yeniden boyutlandırıldığında, ekrandaki yerleşimleri, gösterimi, yeniden çizimi ile ilgili widget'ların olağan işlevselliğini genişletmek de mümkündür.

Qt, WYSIWYG modunda diyaloglar ve formlar oluşturmanıza izin veren "Qt Designer" grafik arayüzü için görsel bir geliştirme ortamı ile birlikte gelir. Qt, bir programı yerelleştirmeyi ve birçok dile çevirmeyi kolaylaştıran grafiksel bir yardımcı program olan "Qt Linguist" ile birlikte gelir; ve kitaplığın belgeleriyle çalışmayı kolaylaştıran ve ayrıca Qt tabanlı yazılımlar için platformlar arası yardım oluşturmanıza olanak tanıyan bir Qt yardım sistemi olan "Qt Assistant". 4.5.0 sürümünden bu yana Qt kiti, bir kod düzenleyici, yardım, grafik araçlar "Qt Designer" ve uygulamalarda hata ayıklama yeteneği içeren bir geliştirme ortamı "" içerir. "" Derleyici olarak GCC veya Microsoft VC ++ ve hata ayıklayıcı olarak GDB kullanabilir. Windows sürümleri için kitaplık bir derleyici, başlık ve nesne dosyalarıyla tamamlanır.

Qt bileşenleri

Kütüphane birkaç modüle bölünmüştür, kütüphanenin dördüncü versiyonu için bunlar:

  • QtCore - diğer modüller tarafından kullanılan kütüphane çekirdek sınıfları;
  • QtGui - GUI bileşenleri;
  • QtNetwork, ağ programlama için bir sınıflar topluluğudur.

Çeşitli üst düzey protokoller için destek, sürümden sürüme değişebilir. 4.2.x sürümünde FTP ve HTTP protokolleriyle çalışmak için sınıflar vardır. QTcpServer, QTcpSocket for TCP ve QUdpSocket for UDP gibi sınıflar, TCP/IP protokolleri ile çalışacak şekilde tasarlanmıştır;

  • QtOpenGL - OpenGL ile çalışmak için bir dizi sınıf;
  • QtSql, SQL yapılandırılmış sorgu dilini kullanan veritabanlarıyla çalışmak için bir sınıflar kümesidir.

4.2.x sürümünde bu modülün ana sınıfları: QSqlDatabase - veritabanına bağlantı sağlamak için bir sınıf, herhangi bir özel veritabanıyla çalışmak için QSqlDriver sınıfından miras alınan bir nesne gerektirir - belirli bir veritabanı için uygulanan soyut bir sınıf ve derleme Veritabanı SDK için gerektirebilir. Örneğin, bir veritabanı / InterBase için bir sürücü oluşturmak için bu veritabanının teslimat paketinde bulunan .h dosyaları ve statik bağlantı kitaplıkları gerekir;

  • QtScript - Qt Komut Dosyaları ile çalışmak için sınıflar;
  • QtSvg - Ölçeklenebilir Vektör Grafikleri (SVG) verileri görüntülemek ve bunlarla çalışmak için sınıflar;
  • QtXml - XML ​​ile çalışmak için SAX ve DOM çalışma modelleri tarafından desteklenen bir modül;
  • QtDesigner - kendi widget'larınız için QtDesigner uzantıları oluşturmaya yönelik sınıflar;
  • QtUiTools - bir uygulamada Qt Designer formlarını işlemek için sınıflar;
  • QtAssistant - Yardım sistemi;
  • Qt3Support - Qt 3.x.x kitaplığı ile uyumluluk için gerekli sınıflara sahip bir modül;
  • QtTest - UNIT testleri ile çalışmak için bir modül;
  • QtWebKit, Qt'ye entegre edilmiş ve sınıfları aracılığıyla erişilebilen bir modüldür;
  • QtXmlPatterns - XQuery 1.0 ve XPath 2.0 desteği için modül;
  • - hem yerel olarak hem de cihazlardan ve ağ üzerinden video ve sesin oynatılmasını ve kaydedilmesini destekleyen bir modül;
  • QtCLucene - Qt 4.4'teki Assistant'ın yeni sürümünde kullanılan tam metin arama desteği için bir modül;
  • ActiveQt, Microsoft Windows altında Qt geliştiricileri için ActiveX ve COM teknolojileriyle çalışmak için bir modüldür.
  • QtDeclarative, dinamik, özelleştirilebilir kullanıcı arayüzleri oluşturmak için bildirimsel bir çerçeve sağlayan bir modüldür.

Ayrıca uygulanan teknoloji WoC - Plazma'nın 4.1'de uygulandığı tuval üzerine widget'lar, Qt kitaplığının widget'larını doğrudan uygulamalarda kullanmak mümkün olacaktır. Ölçeklenebilirlik ve çeşitli grafik efektlerle bir QGraphicsView üzerinde parçacıkların düzenlenmesini sağlar.

Kitaplık, hangi dosyaların derleneceği, başlık dosyalarının aranacağı yollar ve diğer pek çok bilgi hakkında bilgi içeren .pro dosyası adı verilen kendi proje biçimini kullanır. Daha sonra, qmake yardımcı programı kullanılarak, bunlar derleyicinin make yardımcı programı için bir makefile dönüştürülür. Microsoft Visual Studio 2003/2005/2008/2010 ile entegratörler yardımıyla da çalışmak mümkündür. Daha yakın zamanlarda, kitaplığın 4.x.x sürümü için entegrasyon kullanıma sunuldu.

Java geliştiricileri, aynı satıcının Qt Jambi çerçevesini kullanarak Qt'yi kullanabilir (Qt Software, resmi olarak 2009'dan beri bu çerçeveyi geliştirmeyi durdurmuştur).

Qt projesinin önemli avantajlarından biri, örneğin aşağıdakilerden farklı olarak yüksek kaliteli belgelerin mevcudiyetidir. Dokümantasyon makaleleri birçok örnekle sağlanır. Kütüphanenin kaynak kodu iyi biçimlendirilmiştir, ayrıntılı olarak yorumlanmıştır ve okunması kolaydır, bu da Qt'yi öğrenmeyi kolaylaştırır.