Ablakok.  Vírusok.  Jegyzetfüzetek.  Internet.  hivatal.  Segédprogramok.  Drivers

Bevezető rész: A Qt nem csak elemek GUI. Ez a keretrendszer egy összefüggő rendszer. A Qt objektumok affinitása a QObject osztály öröklődésén keresztül történik. A köztük lévő kapcsolatok pedig a jel-rés rendszeren keresztül valósulnak meg Ebben a cikkben a könyvtár főbb osztályait és hasznos tulajdonságait ismertetjük. QObject Ez az összes Qt objektum alaposztálya. Bármely osztály örökli, amely jeleket és réseket használ. Lehetővé teszi az objektumok összekapcsolását. Ehhez hasznos funkciókat is biztosít. Bemutatjuk ezt…

Első Qt program:

Az első Qt program: A Qt egy hatékony eszköztár, amely számos módon életre keltheti a programozó ötleteit. Kezdjük el a tanulást a legelső programtól kezdve, tehát kéznél van egy QtCreator fejlesztői környezet, amelyhez egy fordító is kapcsolódik (például MinGW). A fejlesztői környezetben válassza az Egyéb projekt-> Projekt alkönyvtárakkal menüpontot. Név: cppstudio. Itt a kényelem kedvéért az oldalról vett összes alkalmazást eltároljuk. Készítsünk itt egy QWidget projektet lesson_1 néven, és töröljük ki benne a mainwindows.h, mainwindows.cpp, ... fájlokat.

Bevezetés - Qt Graphics Library

A Qt egy ingyenes és széles körben használt C++ grafikus könyvtár. Számos összetevőt tartalmaz, amelyek nem csak a grafikát támogatják, hanem hálózatokat, adatbázisokat stb. Általános információk: A programozó a használat kezdetétől kap egy összekapcsolt keretrendszert. Ez lehetővé teszi, hogy a legtöbb program írásakor csak beépített osztályokat használjunk, és szinte teljesen megtagadjuk az adott operációs rendszerhez való társítást. Ez a megközelítés megvalósítja a fejlesztő függetlenségét és szabadságát. (Nem kell többre átírni a programot operációs rendszer. A Windows algoritmusa lefordítható...

A bejegyzés életének egy napja után kezdtem észrevenni a karma kiszivárgását, ezért előre is elnézést kérek a cikkben előforduló esetlegesen elfogadhatatlan előadásmódért és a szubjektivitásért.

Szia Habrahabr!

Nemrég nem tudtam nem figyelni a Qt téma népszerűségére Habriknál, de ennek ellenére továbbra is találkoznak a kommentekben olyanok, akik őszintén hamis és érthetetlen dolgokat mondanak. Ezzel a bejegyzéssel szerettem volna eloszlatni néhány tévhitet a Qt-vel kapcsolatban, és el akartam mondani, miért át kell váltanod a Java/Obj-C/.NET-ről a puha és bolyhos Qt-re.

A vágás alatt rengeteg benyomás, szubjektivitás és szerény véleményem lesz róla legcsodálatosabb alkalmazásfejlesztési keretrendszer. Igyekszem azonban néhány érdekességgel kiegészíteni, hogy cikkem legalább technikailag hasznos értelmet nyerjen. Remélem, hogy szórakoztató lesz, és tetszeni fog.

Essünk neki?

Veshch 1. sz. C++ API

Nem titok, hogy a Qt nagyon kényelmes API-val rendelkezik, pontosabban a qtbase modul elegendő számú osztályt tartalmaz a legtöbb mindennapi feladathoz ( A Qt több, mint egy grafikus felhasználói felület, lol). Már beszéltem az STL konténercsomagolókról a három éves cikkemben - . A karakterláncokkal, a hibakereső kimenettel és még sok mással való munkavégzésre szolgáló osztályok szintén megtalálhatók.

QString fruits = "alma, banán, narancs, banán"; QStringList fruitsList = gyümölcsök.split(", "); qDebug()<< fruitsList; // выведет в консоль [ "apple", "banana", "orange", "banana" ] fruitsList.removeDuplicates(); fruits = fruitsList.join(", "); qDebug() << fruits; // выведет в консоль "apple, banana, orange"
Érdemes elmondani, hogy a Qt modulokkal is rendelkezik az XML-lel, adatbázisokkal ( a fincsi-fincsi mókás MVC rendszer integrációjával), OpenGL, audio/video munka (Phonon), hálózati programozás, WebKit2. A kórházi feladatokra, amelyekkel egy átlagos projekt szembesül, ez a konyha az esetek 90%-ában elegendő, és a modulok ritkán hibáznak.

Tekintettel a C++ iránti szeretetemre, nagyon-nagyon örülök annak, hogy a Qt platformok közötti támogatást nyújt különféle nem triviális dolgokhoz. Párszor különösen érthetetlen pillanatokat kellett megoldanom, de ennyi.

Veshch 2. szám. Qt Gyors

A Qt Quick egy nagyon édes megközelítés a grafikus felhasználói felület létrehozásához. A JavaScript-hez hasonló QML deklaratív nyelv használatával (találd ki, hol találták fel lol) nagy teljesítményt érhet el az interfész prototípusa alkalmazásokban Bármi nehézségek. És az a vicces, hogy egy ilyen ügymenet mellett Az interfész prototípus-készítését még a JavaScript szintaxist ismerő tervező is tudja kezelni. Ezek mind üres szavak lennének, ha nem mutatnék példát a funkcionális kódra (többet a Qt Project-ben találhat – ott).

Import QtQuick 2.0 Rectangle ( azonosító: oldal szélessége: 320; magasság: 480 szín: "világosszürke" Szöveg ( azonosító: helloSzöveg szövege: "Hello world!" y: 30 anchors.horizontalCenter: page.horizontalCenter font.pointSize: 24; font. félkövér: igaz ) Rács ( azonosító: colorPicker x: 4; anchors.bottom: page.bottom; anchors.bottomMargin: 4 sor: 2; oszlopok: 3; térköz: 3 Cell ( cellColor: "red"; onClicked: helloText.color = cellColor ) Cell ( cellColor: "zöld"; onClicked: helloText.color = cellColor ) Cell ( cellColor: "kék"; onClicked: helloText.color = cellColor ) Cell ( cellColor: "sárga"; onClicked: helloText.color = cellColor ) Cell ( cellColor: "acélkék"; onClicked: helloText.color = cellColor ) Cell ( cellColor: "fekete"; onClicked: helloText.color = cellColor ) ) )

A Cell objektum megvalósítása rendkívül triviális, és így van meghatározva

import QtQuick 2.0 elem ( azonosító: konténer tulajdonság alias cellColor: téglalap.szín jel kattintott(szín cellColor) szélesség: 40; magasság: 25 Téglalap ( azonosító: téglalap szegély.szín: "fehér" anchors.fill: szülő ) MouseArea ( horgonyok. kitöltés: szülő onClicked: konténer.kattintott(container.cellColor) ) )

Ebben a kódban nincs egyetlen sor C++, és jól működik. Jó, nem? Emiatt még bűvésznek is éreztem magam - könnyebb elmenni a boltba kenyérért, mint szegecselni egy ilyen alkalmazást. Összetett alkalmazásokban azonban hiányzik egy QML, és ezt kombináljuk C++-szal. Erről a Qt Software hub számos cikkében volt szó – például .

Veshch 3. sz. Közösség

Nos, elérkeztünk egy kellemes pillanathoz. Ha magamról beszélek, viszonylag keveset – mindössze 5 éve – dolgozom Qt-vel. A Qt éves rendezvényeket tart - Qt Developer Days és Qt Contributors "Csúcstalálkozó. Mindegyiken voltam egyszer, tavaly, és nagyon tetszett - magas a felkészültség szintje, a benyomások megvannak. Kommunikálni is kellett Qt "veteránok" - emberek, akik 10 éve részt vesznek a csúcson. El tudom képzelni, milyen klassz a saját szemeid előtt látni egy ilyen projekt növekedését, és minden fejlődés epicentrumában lenni - egyszerűen finom .

Ezek az emberek nagyon toleránsak és jól bánnak az újonnan érkezőkkel, nagyon könnyű és kellemes volt számomra ilyen csodálatos emberekkel kapcsolatot teremteni. A Qt Projectnek vannak fórumai, ahol bárki választ kaphat kérdésére. Vicces, de tényleg devnet nagyon élénkés ott igazán válaszoljon a Qt tanulás során felmerülő kérdésekre.

Veshch 4. sz. Nyílt forráskód és kód áttekintése

A kivágott forrást nyíltan elsősorban a Digia (comm. support +), a KDAB, az ICS és a fejlesztők rajongói fejlesztik. Az egésznek a Gitorious - tadamts ad otthont. Ahhoz, hogy hozzájáruljon a projekt fejlesztéséhez, végig kell mennie szigorú kódellenőrzés - automatizált (megfelel a kódstílusnak, amiről korábban írtam - ) és emberi - a kódodat szakállas bácsik fogják megnézni, akik nem bíznak benned, és hátsó ajtókat keresnek a kódodban. Mindez meglehetősen bonyolult folyamat (Git-problémák / felülvizsgálatok a Review Board-on), és valószínűleg a napokban fogok írni róla egy cikket.

Amúgy a qtbase fában van pár commit, szóval pm-ben lehet kérdezni - megpróbálok válaszolni a kérdésekre.

Veshch 5. sz. Projektfejlesztési dinamika

A Qt-t sok éven át, a 90-es évek vége óta fejlesztették. Ezalatt az olyan cégek, mint a Trolltech és a Nokia már eleget lejátszottak a kereskedelmi verziójából, és most a Digia is ezt teszi. De egy biztos: a projekt él és virul. Néhány évig a tervezést mind widgetekben írták (C++ osztályok, mind QWidget alapján), és ma már egy kisgyerek is meg tudja csinálni. Azt hiszem, nem érdemes azt mondani, hogy vele párhuzamosan a legerősebb dolog aktívan fejlődik - a Qt Creator, amely ma már nem csak a Qt programozóknak tetszik!

^ menő Qt Creator, amiben csodákat tehetsz és nem kapsz érte semmit.

Sajnos nincsenek szigorú számok, de azt mondják, hogy a kódot minden nap optimalizálják, és a kódbázist gondosan bővítik - új funkciókat adnak hozzá, és javítják a régi hibákat (ezt már sokszor sikerült ellenőriznem). Mindez nagyon alkalmas, és nem lehet más, mint örülni.

Emellett jelenleg is folyik a platformok aktív fejlesztése. iOS, Android, Windows Phone, most programokat gyűjthetsz nekik!

Eredmény

Szerintem érted, hogy a Qt nagyon menő, és a cikk elolvasása után te is beleszerettél, mint én.
Köszönöm a figyelmet!

A bejegyzés életének egy napja után kezdtem észrevenni a karma kiszivárgását, ezért előre is elnézést kérek a cikkben előforduló esetlegesen elfogadhatatlan előadásmódért és a szubjektivitásért.

Szia Habrahabr!

Nemrég nem tudtam nem figyelni a Qt téma népszerűségére Habriknál, de ennek ellenére továbbra is találkoznak a kommentekben olyanok, akik őszintén hamis és érthetetlen dolgokat mondanak. Ezzel a bejegyzéssel szerettem volna eloszlatni néhány tévhitet a Qt-vel kapcsolatban, és el akartam mondani, miért át kell váltanod a Java/Obj-C/.NET-ről a puha és bolyhos Qt-re.

A vágás alatt rengeteg benyomás, szubjektivitás és szerény véleményem lesz róla legcsodálatosabb alkalmazásfejlesztési keretrendszer. Igyekszem azonban néhány érdekességgel kiegészíteni, hogy cikkem legalább technikailag hasznos értelmet nyerjen. Remélem, hogy szórakoztató lesz, és tetszeni fog.

Essünk neki?

Veshch 1. sz. C++ API

Nem titok, hogy a Qt nagyon kényelmes API-val rendelkezik, pontosabban a qtbase modul elegendő számú osztályt tartalmaz a legtöbb mindennapi feladathoz ( A Qt több, mint egy grafikus felhasználói felület, lol). A három évvel ezelőtti cikkemben már beszéltem az STL konténercsomagolókról - poke. A karakterláncokkal, a hibakereső kimenettel és még sok mással való munkavégzésre szolgáló osztályok szintén megtalálhatók.

QString fruits = "alma, banán, narancs, banán"; QStringList fruitsList = gyümölcsök.split(", "); qDebug()<< fruitsList; // выведет в консоль [ "apple", "banana", "orange", "banana" ] fruitsList.removeDuplicates(); fruits = fruitsList.join(", "); qDebug() << fruits; // выведет в консоль "apple, banana, orange"
Érdemes elmondani, hogy a Qt modulokkal is rendelkezik az XML-lel, adatbázisokkal ( a fincsi-fincsi mókás MVC rendszer integrációjával), OpenGL, audio/video munka (Phonon), hálózati programozás, WebKit2. A kórházi feladatokra, amelyekkel egy átlagos projekt szembesül, ez a konyha az esetek 90%-ában elegendő, és a modulok ritkán hibáznak.

Tekintettel a C++ iránti szeretetemre, nagyon-nagyon örülök annak, hogy a Qt platformok közötti támogatást nyújt különféle nem triviális dolgokhoz. Párszor különösen érthetetlen pillanatokat kellett megoldanom, de ennyi.

Veshch 2. szám. Qt Gyors

A Qt Quick egy nagyon édes megközelítés a grafikus felhasználói felület létrehozásához. A JavaScript-hez hasonló QML deklaratív nyelv használatával (találd ki, hol találták fel lol) nagy teljesítményt érhet el az interfész prototípusa alkalmazásokban Bármi nehézségek. És az a vicces, hogy egy ilyen ügymenet mellett Az interfész prototípus-készítését még a JavaScript szintaxist ismerő tervező is tudja kezelni. Ezek mind üres szavak lennének, ha nem mutatnék példát a funkcionális kódra (többet a Qt Project-ben találhat – ott).

Import QtQuick 2.0 Rectangle ( azonosító: oldal szélessége: 320; magasság: 480 szín: "világosszürke" Szöveg ( azonosító: helloSzöveg szövege: "Hello world!" y: 30 anchors.horizontalCenter: page.horizontalCenter font.pointSize: 24; font. félkövér: igaz ) Rács ( azonosító: colorPicker x: 4; anchors.bottom: page.bottom; anchors.bottomMargin: 4 sor: 2; oszlopok: 3; térköz: 3 Cell ( cellColor: "red"; onClicked: helloText.color = cellColor ) Cell ( cellColor: "zöld"; onClicked: helloText.color = cellColor ) Cell ( cellColor: "kék"; onClicked: helloText.color = cellColor ) Cell ( cellColor: "sárga"; onClicked: helloText.color = cellColor ) Cell ( cellColor: "acélkék"; onClicked: helloText.color = cellColor ) Cell ( cellColor: "fekete"; onClicked: helloText.color = cellColor ) ) )

A Cell objektum megvalósítása rendkívül triviális, és így van meghatározva

import QtQuick 2.0 elem ( azonosító: konténer tulajdonság alias cellColor: téglalap.szín jel kattintott(szín cellColor) szélesség: 40; magasság: 25 Téglalap ( azonosító: téglalap szegély.szín: "fehér" anchors.fill: szülő ) MouseArea ( horgonyok. kitöltés: szülő onClicked: konténer.kattintott(container.cellColor) ) )

Ebben a kódban nincs egyetlen sor C++, és jól működik. Jó, nem? Emiatt még bűvésznek is éreztem magam - könnyebb elmenni a boltba kenyérért, mint szegecselni egy ilyen alkalmazást. Összetett alkalmazásokban azonban hiányzik egy QML, és ezt kombináljuk C++-szal. Ezt a Qt Software hub számos cikke tárgyalta – például ott.

Veshch 3. sz. Közösség

Nos, elérkeztünk egy kellemes pillanathoz. Ha magamról beszélek, viszonylag keveset – mindössze 5 éve – dolgozom Qt-vel. A Qt éves rendezvényeket tart - Qt Developer Days és Qt Contributors "Csúcstalálkozó. Mindegyiken voltam egyszer, tavaly, és nagyon tetszett - magas a felkészültség szintje, a benyomások megvannak. Kommunikálni is kellett Qt "veteránok" - emberek, akik 10 éve részt vesznek a csúcson. El tudom képzelni, milyen klassz a saját szemeid előtt látni egy ilyen projekt növekedését, és minden fejlődés epicentrumában lenni - egyszerűen finom .

Ezek az emberek nagyon toleránsak és jól bánnak az újonnan érkezőkkel, nagyon könnyű és kellemes volt számomra ilyen csodálatos emberekkel kapcsolatot teremteni. A Qt Projectnek vannak fórumai, ahol bárki választ kaphat kérdésére. Vicces, de tényleg devnet nagyon élénkés ott igazán válaszoljon a Qt tanulás során felmerülő kérdésekre.

Veshch 4. sz. Nyílt forráskód és kód áttekintése

A kivágott forrást nyíltan elsősorban a Digia (comm. support +), a KDAB, az ICS és a fejlesztők rajongói fejlesztik. Az egésznek a Gitorious - tadamts ad otthont. Ahhoz, hogy hozzájáruljon a projekt fejlesztéséhez, végig kell mennie szigorú kódellenőrzés - automatizált (a kód stílusának megfelelő, amiről korábban írtam - ptsss) és emberi - a kódodat szakállas bácsik fogják figyelni, akik nem bíznak benned, és hátsó ajtókat keresnek a kódodban. Mindez meglehetősen bonyolult folyamat (Git-problémák / felülvizsgálatok a Review Board-on), és valószínűleg a napokban fogok írni róla egy cikket.

Amúgy a qtbase fában van pár commit, szóval pm-ben lehet kérdezni - megpróbálok válaszolni a kérdésekre.

Veshch 5. sz. Projektfejlesztési dinamika

A Qt-t sok éven át, a 90-es évek vége óta fejlesztették. Ezalatt az olyan cégek, mint a Trolltech és a Nokia már eleget lejátszottak a kereskedelmi verziójából, és most a Digia is ezt teszi. De egy biztos: a projekt él és virul. Néhány évig a tervezést mind widgetekben írták (C++ osztályok, mind QWidget alapján), és ma már egy kisgyerek is meg tudja csinálni. Azt hiszem, nem érdemes azt mondani, hogy vele párhuzamosan a legerősebb dolog aktívan fejlődik - a Qt Creator, amely ma már nem csak a Qt programozóknak tetszik!

^ menő Qt Creator, amiben csodákat tehetsz és nem kapsz érte semmit.

Sajnos nincsenek szigorú számok, de azt mondják, hogy a kódot minden nap optimalizálják, és a kódbázist gondosan bővítik - új funkciókat adnak hozzá, és javítják a régi hibákat (ezt már sokszor sikerült ellenőriznem). Mindez nagyon alkalmas, és nem lehet más, mint örülni.

Emellett jelenleg is folyik a platformok aktív fejlesztése. iOS, Android, Windows Phone, most programokat gyűjthetsz nekik!

Eredmény

Szerintem érted, hogy a Qt nagyon menő, és a cikk elolvasása után te is beleszerettél, mint én.
Köszönöm a figyelmet!

Előadás és labor

Árfolyamon: OS

A témában: Qt programozási környezet

Elkészült:

Az A-06-09 csoport tanulói

Szmirnov Andrej

Marugin Mihail

1. Bemutatkozás

2.Történelem

3. Fejlesztési környezet

4. Alkalmazási kör

5.Általános információk

6.Alkatrészek

7. Fejlesztési környezet

8. A Qt Creator használata

9.Példák

10. Laboratóriumi munkára való beosztás

Bevezetés

Számos más programozási nyelvhez is vannak "kötések": Python - PyQt, Ruby - QtRuby, Java - Qt Jambi, PHP - PHP-Qt és mások.

Lehetővé teszi a vele írt szoftverek futtatását a legtöbb modern operációs rendszerben úgy, hogy minden operációs rendszerhez egyszerűen lefordít egy programot a forráskód megváltoztatása nélkül. Tartalmazza az összes főbb osztályt, amelyre az alkalmazásszoftverek fejlesztése során szükség lehet, a grafikus interfész elemektől a hálózattal, adatbázisokkal és XML-lel való munkához szükséges osztályokig. A Qt teljesen objektum-orientált, könnyen bővíthető, és támogatja a komponens programozási technikákat.

A 4.5-ös verziótól kezdve a Qt különféle licencekkel kerül terjesztésre. Ez azt jelenti, hogy ha kereskedelmi alkalmazásokat kíván létrehozni, kereskedelmi Qt licencet kell vásárolnia; ha nyílt forráskódú programot hoz létre, használhatja a GPL verziót.

Sztori

A Qt fejlesztőeszközök először 1995 májusában váltak köztudomásúvá. A Qt-t eredetileg Haarvard Nord és Eirik Chamb-Ing fejlesztette ki.

1991-ben a Haarvard elkezdte írni azokat az osztályokat, amelyek valójában a Qt-t alkották, és a tervezési döntéseket Eirik-kel közösen hozták meg.

A következő évben Eirik előállt a "signals and slots" ötletével, egy egyszerű, de hatékony grafikus felhasználói felület programozási paradigmával, amelyet jelenleg számos más eszköz is átvesz.

1993-ra Haarward és Eirik kifejlesztették az első Qt grafikus motort, és létrehozhatták saját widgeteiket.

Érdekes megjegyzések: A "Q" betűt azért választották osztály előtagnak, mert szép arca volt a Haarvard által használt Emacs betűtípussal. A "t" betű hozzáadásra került, ami "eszközkészletet" (eszközkészletet) jelent.

Fejlesztés

1995 áprilisában a norvég "Metis" cég szerződést írt alá velük a Qt alapú szoftver fejlesztésére.

1995. május 26. – A Qt. első nyilvános kiadása. A Qt Windows és Unix fejlesztésekben is használható volt, a programozási felület mindkét platformon ugyanaz volt.



1996-tól 2001-ig - fejlesztés a Qt3 verzióra. A Qt most Windows, Mac Os X és Unix rendszereken működött.

2005 nyara – megjelent a Qt 4.0. Körülbelül 500 osztályával és több mint 9000 funkciójával a Qt 4 nagyobb és gazdagabb, mint bármelyik korábbi verzió; több könyvtárra van felosztva, így a fejlesztők csak a Qt azon részeit használhatják, amelyekre szükségük van.

A mai verzió a Qt4.8

A Qt 4 nagy előrelépést jelent a korábbi verziókhoz képest; a hatékony és könnyen használható tárolóosztályok teljesen új készletét, továbbfejlesztett modell/nézet architektúra funkcionalitást, gyors és rugalmas 2D grafikus keretrendszert és hatékony osztályokat tartalmaz a Unicode szövegek megtekintéséhez és szerkesztéséhez, nem is beszélve a több ezer apró fejlesztésről. az osztályok spektruma Qt.

A Qt 4 a Qt első verziója, amely minden támogatott platformon elérhető kereskedelmi és nyílt forráskódú fejlesztésekhez egyaránt.

Alkalmazási terület

Lehetőség asztali alkalmazások létrehozására Windows, Linux, Mac OS X rendszerekhez (konzolon és ablakos GUI-n egyaránt). Az elmúlt néhány évben a mobileszközök számának növekedése irányába mutat. Ennek eredményeként a Qt mobil platformokra portolták át: Symbian, Maemo, MeeGo. Tudunk a Qt Lighthouse Android platformra történő portolásának sikeres tapasztalatairól is.

Általános információ

Lehetővé teszi a vele írt szoftverek futtatását a legtöbb modern operációs rendszerben úgy, hogy minden operációs rendszerhez egyszerűen lefordít egy programot a forráskód megváltoztatása nélkül.

Tartalmazza az összes főbb osztályt, amelyre az alkalmazásszoftverek fejlesztése során szükség lehet, a grafikus interfész elemektől a hálózattal, adatbázisokkal és XML-lel való munkához szükséges osztályokig.

A Qt teljesen objektum-orientált, könnyen bővíthető, és támogatja a komponens programozási technikákat.

A könyvtárnak vannak verziói Microsoft Windows, UNIX osztályú rendszerek X11 grafikával, iOS, Android, Mac OS X, Microsoft Windows CE, QNX, beágyazott Linux rendszerek és S60 platform számára. Jelenleg a Qt támogatás Windows Phone-ban való megvalósításának lehetőségét fontolgatják. A Haiku-ra való áthelyezés is folyamatban van.

A Qt megkülönböztető jellemzője a többi könyvtártól a használat Meta Object Compiler (MOC)- egy előzetes forráskód-feldolgozó rendszer (általában a Qt nem a tiszta C ++ könyvtára, hanem annak speciális dialektusa, amelyből a MOC „lefordít” a későbbi fordításhoz bármely szabványos C ++ fordítóval). A MOC lehetővé teszi, hogy többszörösére növelje a könyvtárak teljesítményét olyan fogalmak bevezetésével, mint a slotok és a jelek. Ezenkívül lehetővé teszi a kód tömörebbé tételét. A MOC segédprogram C++ fejlécfájlokban keresi a Q_OBJECT makrót tartalmazó osztálydefiníciókat, és létrehoz egy további C++ forrásfájlt, amely tartalmazza a metaobjektum kódját.

A Qt lehetővé teszi saját beépülő modulok létrehozását, és közvetlenül a vizuális szerkesztő panelen való elhelyezését. Lehetőség van a widgetek képernyőre helyezésével, megjelenítésével, átrajzolásával kapcsolatos szokásos funkcionalitás bővítésére is az ablak átméretezésekor.

A Qt a „Qt Designer” vizuális GUI fejlesztői környezettel érkezik, amely lehetővé teszi párbeszédpanelek és űrlapok létrehozását WYSIWYG módban.

A Qt disztribúció tartalmazza a "Qt Linguist"-t - egy grafikus segédprogramot, amely lehetővé teszi a program lokalizálásának és számos nyelvre történő fordításának egyszerűsítését; és a "Qt Assistant", egy Qt súgórendszer, amely megkönnyíti a könyvtári dokumentációval való munkát, és lehetővé teszi a Qt-re épülő szoftverek platformok közötti súgójának létrehozását is. A 4.5.0-s verziótól kezdődően a Qt programcsomag tartalmazza a "Qt Creator" fejlesztői környezetet, amely tartalmaz egy kódszerkesztőt, súgót, "Qt Designer" grafikus eszközöket és lehetőséget az alkalmazások hibakeresésére. A "Qt Creator" használhatja a GCC-t vagy a Microsoft VC++-t fordítóként és a GDB-t hibakeresőként. Windows-verziók esetén a könyvtárhoz tartozik egy fordító, a MinGW fejléc és az objektumfájlok.

Alkatrészek(Válasszunk párat )

A könyvtár több modulra oszlik, a könyvtár negyedik verziója esetében ez:

QtCore- más modulok által használt könyvtári alaposztályok;

QtGui- GUI komponensek;

QtNetwork- osztálykészlet a hálózati programozáshoz. A különféle magas szintű protokollok támogatása verziónként változhat. A 4.2.x verzió osztályokat tartalmaz az FTP és HTTP protokollokkal való munkavégzéshez. Az olyan osztályokat, mint a QTcpServer, a QTcpSocket for TCP és a QUdpSocket for UDP, úgy tervezték, hogy működjenek a TCP/IP protokollokkal;

QtOpenGL- osztálykészlet az OpenGL-lel való munkavégzéshez;

QtSql- osztályok csoportja az SQL strukturált lekérdezési nyelvet használó adatbázisokkal való munkavégzéshez. Ennek a modulnak a fő osztályai a 4.2.x verzióban: QSqlDatabase- egy osztály az adatbázishoz való kapcsolódás biztosítására, egy adott adatbázissal való munkavégzéshez, ehhez a QSqlDriver osztályból örökölt objektumra van szükség - egy absztrakt osztályra, amelyet egy adott adatbázishoz valósítottak meg, és szükség lehet egy adatbázis SDK-ra a fordításhoz. Például egy adatbázis illesztőprogramjának létrehozásához a FireBird/InterBase .h fájlokat és statikus csatoló könyvtárakat igényel, amelyek az adatbázis szállítási csomagjában találhatók;

QtScript- osztályok a Qt szkriptekkel való munkavégzéshez;

QtSvg- osztályok Scalable Vector Graphics (SVG) adatok megjelenítésére és kezelésére;

QtXml- támogatja az XML, SAX és DOM munkamodellekkel való munkavégzés modulját;

QtDesigner- osztályok QtDesigner bővítmények létrehozásához saját widgetekhez;

QtUiTools- osztályok a Qt Designer űrlap alkalmazásban történő feldolgozásához;

QtAssistant- referenciarendszer;

Qt3 támogatás- egy modul a Qt könyvtár 3.x.x verziójával való kompatibilitáshoz szükséges osztályokkal;

QtTest- modul az UNIT tesztekkel való munkavégzéshez;

Qtwebkit- a Qt-be integrált, osztályain keresztül elérhető WebKit modul;

QtXmlMinták- modul az XQuery 1.0 és XPath 2.0 támogatásához;

Phonon- egy modul, amely támogatja a videó és hang lejátszását és rögzítését, mind helyben, mind az eszközökről és a hálózaton keresztül;

QtCLucén- a teljes szöveges keresést támogató modul, amelyet a Qt 4.4-es Assistant új verziójában használnak;

ActiveQt- modul az ActiveX és COM technológiákkal való munkavégzéshez Qt-fejlesztőknek Windows alatt.

Qt deklaratív- egy modul, amely deklaratív keretet biztosít dinamikus, testreszabható felhasználói felületek létrehozásához.

A könyvtár saját projektformátumot, úgynevezett .pro fájlt használ, amely információkat tartalmaz arról, hogy mely fájlok kerülnek lefordításra, a fejlécfájlok keresésének útvonalai és sok egyéb információ.

Ezt követően a qmake segédprogram segítségével makefile-t készítenek a fordító make segédprogramjához. A Microsoft Visual Studio 2003/2005/2008/2010-es verziójával integrátorok segítségével is lehet dolgozni. A közelmúltban elérhetővé vált az Eclipse integrációja a könyvtár 4.x.x verziójához.

A Java fejlesztők használhatják a Qt-t ugyanazon gyártó Qt Jambi keretrendszerével (hivatalosan 2009 óta a Qt Software leállította ennek a keretrendszernek a fejlesztését).

«+»

A Qt projekt egyik jelentős előnye a minőségi dokumentáció elérhetősége. A dokumentációs cikkek számos példát tartalmaznak. Maga a könyvtár forráskódja jól formázott, bőven kommentált és könnyen olvasható, ami a Qt megtanulását is megkönnyíti.

Fejlesztőkörnyezet

A Qt Creator egy ingyenes, többplatformos IDE C, C++ és QML fejlesztésekhez. A Trolltech (Nokia) fejlesztette ki a Qt keretrendszerrel való együttműködéshez. Tartalmaz egy grafikus felhasználói felület hibakeresőt és a vizuális interfész fejlesztő eszközöket, mind a QtWidget, mind a QML használatával. Támogatott fordítók: Gcc, Clang, MinGW, MSVC, Linux ICC, GCCE, RVCT, WINSCW.

A Qt Creator fő célja, hogy megkönnyítse egy alkalmazás fejlesztését a Qt keretrendszer használatával különböző platformokon. Ezért minden fejlesztőkörnyezetben rejlő szolgáltatások között vannak olyan speciális szolgáltatások is, mint például a QML-ben végzett hibakereső alkalmazások és a Qt-tárolókból származó adatok megjelenítése a hibakeresőben, beépített felület-tervező mind a QML-ben, mind a QtWidgetekben.

A Qt Creatorban dolgozom

A Qt Creator egy praktikus "varázslóval" rendelkezik új projektek, űrlapok, osztályfájlok stb. létrehozásához. Bár ahelyett, hogy a fő ablakhoz hoznánk létre egy ui-fájlt, beszúrhatunk néhány egyszerű kódot a projektbe anélkül, hogy megérintené a vizuális programozás örökségét. Egy projekt létrehozása vagy megnyitása után maga a fejlesztői környezet jelenik meg előttünk. Elsőre furcsán néz ki. Például nincsenek híres lapok (gyökérrel rendelkező lapok). Inkább mindenre valók, kivéve a szerkesztőfájlokat. Maguk a fájlok két listából érhetők el: projektfájlok (alapértelmezés szerint a bal oldali panelen) és már megnyitott fájlok (a szerkesztőpanel felső sorában). Miért döntöttek úgy, hogy elhagyják a lapokat? Szerintem a képernyőn való helytakarékosság kedvéért.

Egy másik szokatlan pont meglehetősen relatív, mivel a "dialógusok nélkül" felületet már régóta átvette néhány más program (például a TEA szerkesztő). A Qt Creatorban a szöveges kereséshez és pótláshoz olyan beviteli mezők jelennek meg, amelyekbe beíráskor a talált egyezések azonnal kiemelésre kerülnek a szerkesztőben. Van F3 a további kereséshez, és egy külön beviteli mező a helyettesítéshez. A közelben lehetőségek is vannak. Mindezeknek köszönhetően az ilyen műveleteket gyorsan és kényelmesen hajtják végre. Ugyanez vonatkozik az információs és hibakereső panelekre is: nincs modalitás, extra ablakok fedik át a főt, és az interfész architektúra korábbi megközelítésének egyéb varázsai. Minden egy fő ablakban!

A Qt Creator gondoskodott a kódszerkesztőről is. Manapság kevesen lephetnek meg a szintaktikai kiemeléssel, ezért azonnal térjünk át más hasznos funkciókra. Például van egy "teljes kódelemző" - ez a szerkesztő azon képessége, hogy ellenőrizze a kód helyességét a programozási nyelv szempontjából. A kód begépelésekor már a fordítás előtt láthatja, hol vétett szintaktikai hibát. A legtöbb esetben működik, bár vannak kivételek. Az automatikus hozzáadás remekül működik: beírtad egy osztálypéldány nevét, egy pontot vagy "->"-t teszel - és kapsz egy legördülő listát az osztály tagjaival. Létezik a kódblokkok összehajtása - az úgynevezett "hajtogatás". Viszont úgy gondolom, hogy enélkül vizuálisabb a kód, ezért soha nem használom ki ezt a lehetőséget.

A kódban való mozgás jól sikerült – külső ctagek nélkül. Elég, ha a kurzort a függvény vagy változó nevére helyezzük, és megnyomjuk az F2-t, ezután a szerkesztő a deklaráció helyére lép. A Shift-F2 váltás a deklaráció és a kód között, az F4 pedig csak a cím és a cpp-fájl között. Ha az egérmutatót a kódban meghívott függvény nevére viszi, akkor megjelenik egy eszköztipp a paramétereiről.

referenciarendszer a következőképpen működik. Tegyük fel, hogy van valahol a kódjában egy QMenu típusú változó. Ha ráhelyezi a kurzort és megnyomja az F1-et, megjelenik egy súgópanel a QMenu osztály leírásával. Szintén a főablakban található a Súgó fül, ahol az összes Qt dokumentáció elérhető.

Tehát az idő nagy részét a szerkesztő lapon tölti. Nem teljesen világos, hogy a Qt Creator beállításaiban miért van akár öt szakasz a különböző szerkesztők számára - alapértelmezés szerint a szkriptekhez, a C ++-hoz, a projektekhez és a Perforce-hoz (kereskedelmi verzióvezérlő rendszer). A C++ szerkesztő beállításai a Qt program kódszerkesztőjének beállításai. Megjegyzem, a Qt Creator legfrissebb "pillanatfelvételein" a betűkészlet-beállítások még mindig egyetlen szakaszba vannak rendezve, ami várható volt.

Hasznos a kiemelések és a betűtípusok beállítása, mivel az alapértelmezett beállítással nem túl kényelmes dolgozni. Először is, a betűméret túl kicsi, másodszor pedig az #ifdef / #endif közé zárt kódblokkokat az elemző „letiltott kódként” kezeli (a Qt Creator beállításaiból származó kifejezés), és színezi őket. szürke színben- nem túl kényelmes elemezni a leírtakat. Ha nem szereti a „hajtogatást”, kapcsolja ki a Hajtogatásjelzők megjelenítése funkciót ugyanazokban a szerkesztő beállításokban.

Könyvjelzők és töréspontok helyezhetők el a szerkesztő mezőiben. Maga a szerkesztőpanel végtelen számú egymásba ágyazott panelre osztható – hasonlóan a Konquerorhoz. Így egyszerre több fájlt is szerkeszthet a képernyőn, vagy ugyanazt a dokumentumot, de különböző helyeken. Ehhez először fel kell osztani a szerkesztőpanelt (például Ablak - Felosztás/alsó rész segítségével), majd az Ablak - Dokumentum másolása menüpontot kell kiválasztani. Ez a megközelítés néha hasznosabb, mint az unalmas könyvjelző-navigáció.

A Qt Creator architektúrája beépülő modulokon alapul. A szerkesztő egy bővítmény, a könyvjelző motor egy bővítmény, a projektfájlokat tartalmazó panel szintén egy bővítmény, és így tovább. Lista telepített bővítmények a Súgó - A beépülő modulokról menüpontban található. Valószínűleg a jövőben lehetőség lesz további bővítmények telepítésére, de eddig nem találtam erre a mechanizmust, ahogy magukat a kiegészítő bővítményeket sem. De magukban az összeállításokban soha nem látott mértékben jelennek meg az új bővítmények. A Subversion és a Git támogatási modulok mindössze egy hónap alatt jelentek meg. A Qt Creator-t általában a mulandóság jellemzi. A Qt Creator menüpontokat átnevezzük, és verzióról verzióra más almenükbe helyezzük át. Arról nem is beszélve, hogy folyamatosan születnek további funkciók.

Figyeljünk egy kicsit a beállítási ablakra, amely szerencsére sok. Testreszabhatja a billentyűparancsokat, és külső fájlokkal importálhatja / exportálhatja őket. Ezzel kényelmesen átviheti kedvenc billentyűparancsait gépről gépre. Alapértelmezés szerint a Qt Creator két ilyen előre telepített fájlt tartalmaz: MS Visual C++ és Xcode számára. Minden, ami az automatikus kiegészítéssel, behúzással, szintaktikai kiemeléssel és egyebekkel kapcsolatos, megtalálható a szerkesztő beállításaiban - Szövegszerkesztő.

A Qt Creator másik érdekes funkciója a Locator (Gyors keresés a régebbi verziókban). A fókusz áthelyezéséhez nyomja meg a Ctrl-K billentyűket. Úgy néz ki, mint egy normál keresősáv, de arra szolgál gyors keresés amit kérsz. Pontosabban, fájlokat keres, fájlokban, osztályokban, függvényekben. Támogatja a módosító karaktereket a keresési feladat finomításához. Előfordulhat például, hogy a Qt dokumentációjában megkeresheti a qApp globális mutató leírását. Mit kell tenni? Korábban a böngészőn keresztül kellett megnyitni a dokumentációt, és ott keresni. De a Qt Creatorban, amikor a Locator mindig kéznél van, elég beírni a keresősávba? qapp és nyomja meg az Enter billentyűt. Ugrás a 100-as sorra? Kérem - tárcsázza a számot, majd írja be újra.

És végül vissza a GDB hibakeresővel való interakcióhoz. A Qt Creator grafikus felületén keresztül lehetővé teszi nemcsak az aktuális projekt hibakeresését, hanem bármely más projektet is külső program- persze, ha hibakeresési információkkal van összeállítva. Hibakereséskor különféle típusú adatok jelennek meg külön lapok: szálak, változók, töréspontok és disassembler. A QStringList példány különösen jól néz ki a hibakeresőben – minden eleme látható. Maga a GDB szabványos kimenete alapértelmezés szerint le van tiltva, csakúgy, mint néhány más lap, például a processzorregiszterek tartalmára vonatkozó információk. Ha a program valamilyen okból „összeomlik”, akkor a hibakereső panel adatai alapján azonnal láthatja, hogy a kódban pontosan hol történt az összeomlás.

1. példa

Első programunk grafikus felhasználói felülettel (GUI - Graphical User Interface) lesz.

#beleértve

#beleértve

int main(int argc, char *argv)

QApplication app(argc, argv);

QPushButton *newbtn = new QPushButton(QObject::tr("OK"));

QObject::connect(newbtn, SIGNAL(clicked()), &app, SLOT(quit()));

newbtn->resize(180,40);

newbtn->show();

return app.exec();

Az első két sor a Qt osztály definíciója.

Ezek az osztályok a Qt könyvtár alkalmazásprogramozási felületéhez (API - Application Programming Interface) tartoznak. A könyvtárban vannak azonos nevű fájlok, amelyek leírják ezeket az osztályokat.

A 6. sor létrehoz egy QApplication objektumot. Ez az osztály kezeli az alkalmazás összes erőforrását. Ezután létrejön egy QPushButton (gomb) osztályú objektum "OK" felirattal.

A gomb egy widget. A 8. sor a gomb clicked() jelét a QApplication3 objektum quit() slotjához köti. A 9. sorban beállítjuk a widget méretét, a 10. sorban pedig megjelenítjük. A 11. sor a vezérlés átadására szolgál a Qt alkalmazásnak. Ekkor a program belép a felhasználó és a rendszer eseményhurokba.

2. példa: Felhasználói bevitel ellenőrzése

Amikor a felhasználót arra kérik, hogy írjon be néhány adatot egy szövegmezőbe, nagyon gyakori, hogy valami teljesen váratlan dolgot kap. Előfordulhat, hogy a felhasználó számokat ír be szavakkal, rossz tizedeselválasztót használ, vagy elfelejtheti beírni a körzetszámot telefonszám. Így a legtöbb esetben ellenőrizni kell a megadott információk helyességét (megengedhetőségét)1.

A Qt tartalmazza a QValidator osztályt, amely garantálja a bevitt adatok helyességét. Ez az osztály nem használható közvetlenül. Az adatok ellenőrzéséhez vagy kész QIntValidator, QDoubleValidator, QRegExpValidator alosztályokat kell használnia, vagy saját maga írjon egy alosztályt.

A validate (QString & input, int & pos) metódus átadja az érvényesítendő karakterláncot és a kurzor pozícióját. A metódus a következő értékeket tudja visszaadni:

QValidator::Invalid – A karakterlánc érvénytelen.

QValidator::Acceptable - a karakterlánc érvényes.

QValidator::Intermediate - A karakterlánc jelenlegi állapotában nem fogadható el, de érvényessé válhat.

Írjunk egy programot, amely ellenőrzi, hogy egy karakterlánc valós szám-e. Használjuk a kész QDoubleValidator osztályt:

MainWindow::MainWindow()

grid = új QGridLayout; doubleedit = új QLineEdit;

lbdouble = new QLabel(tr("Double:"));

lbresult = new QLabel(tr("Eredmény:"));

eredmény = új QLabel;

vld = new QDoubleValidator(-5, 2999, 5, this);

vld->setNotation(QDoubleValidator::ScientificNotation);

doubleedit->setValidator(vld);

grid->addWidget(lbdouble, 0, 0);

grid->addWidget(doubleedit, 0, 1);

grid->addWidget(lbresult, 1, 0); grid->addWidget(eredmény, 1, 1);

átméretezés(160, 120); setLayout(grid); ...

A QDoubleValidator osztály konstruktora a következő paramétereket veheti fel:

QDoubleValidator::QDoubleValidator (dupla alsó, dupla felső, int decimális, QObject * szülő)

A valós számok tartománya alulról felfelé haladva. decimális - a tizedesjel utáni karakterek száma2.

A QDoubleValidator osztály setNotation(Notation) metódusával beállíthatja a tudományos jelölés érvényességét:

QDoubleValidator::StandardNotation – szabványos jelölés (például: 1,124 vagy -2).

QDoubleValidator::ScientificNotation - tudományos jelölés, azaz. a számnak lehet egy exponenciális része (például: 2,7E-3 vagy 3,3E+2)

A bevitt adatok érvényességének ellenőrzésére a validate() metódust használjuk:

MainWindow::MainWindow()

QObject::connect(doubleedit, SIGNAL(textChanged (const QString &)), this, SLOT(showresult(const QString &)));

void MainWindow::showresult(const QString &text)

QString numtext = szöveg;

if (vld->validate(numtext, pos) == 0) result->setText(tr("invalid"));

if (vld->validate(numtext, pos) == 1) result->setText(tr("Köztes"));

if (vld->validate(numtext, pos) == 2) result->setText(tr("Elfogadható"));

Program kód

main.cpp

#beleértve

#include "főablak.h"

int main(int argv, char **args)

QApplication app(argv, args);

főablak;

return app.exec();

Főablak.h#ifndef MAINWINDOW_H#definiálja MAINWINDOW_H #include class MainWindow: public QWidget( Q_OBJECT public: MainWindow(); privát helyek: void showresult(const QString &); private: QGridLayout *grid; QLineEdit *doubleedit; QLabel *lbdouble, *lbresult, *result; *vldValidator; #endif mainwindow.cpp#beleértve #include "mainwindow.h" MainWindow::MainWindow()( grid = new QGridLayout; doubleedit = new QLineEdit; lbdouble = new QLabel(tr("Double:")); lbresult = new QLabel(tr("Eredmény:") ); result = new QLabel; vld = new QDoubleValidator(-5, 2999, 5, this); vld->setNotation(QDoubleValidator::ScientificNotation); doubleedit->setValidator(vld); grid->addWidget(lbdouble, 0, 0); grid->addWidget(doubleedit, 0, 1); grid->addWidget(lbresult, 1, 0); grid->addWidget(eredmény, 1, 1); resize(160, 120); setLayout(grid) ; QObject::connect(doubleedit, SIGNAL(textChanged (const QString &)), this, SLOT(showresult(const QString &)));) void MainWindow::showresult(const QString &text)( int pos = 0; QString numtext = szöveg; if (vld->validate(numtext, pos) == 0) result->setText(tr("invalid")); if (vld->validate(numtext, pos) == 1) result->setText (tr("Középső")); if (vld->validate(numtext, pos) == 2) result->setText(tr("Elfogadható"));)

3. példa: 2D grafika

A QPainter osztály segítségével bármilyen, a QPaintDevice osztályból örökölt objektumra rajzolhatunk (QWidget, QPrinter, QImage, QGLFramebufferObject stb.). Rajzolhat geometriai formákat, pixmap-okat, szöveget. Először is nézzük meg azokat az osztályokat, amelyek hasznosak lehetnek a QPainterrel való munka során.

A QPoint és QPointF osztályok egy pont helyzetének beállítására szolgálnak egy kétdimenziós koordináta-rendszerben. A QPoint az egész számokhoz, a QPointF pedig a valós számokhoz való. Az összeadás, kivonás, szorzás, osztás műveletei a pontokra vonatkoznak:

QPoint pont(5, 5);

QPoint pont2(10, 10);

A pontok egymással és a koordinátáik nullával való egyenlőségére is összehasonlíthatók.

QPoint pont(5, 10);

QPoint pont2(5, 10);

ha (pont == pont2)

bln = pont.isNull();

A QSize és QSizeF osztályok a méret tárolására szolgálnak. A QPoint és QPointF osztályokhoz hasonló módszerek mellett ezek az osztályok rendelkeznek a scale() metódussal, amely lehetővé teszi egy grafikus objektum méretezését.

A QRect és QRectF osztályok négyszögletes területek tárolására szolgálnak (a bal felső sarok koordinátái és a méret):

QRectF(QPointF pont, QSizeF méret);

A QLine és QLineF osztályok egy egyenes vonalat írnak le. A QPolygon és QPolygonF osztályok egy zárt alakzatot írnak le, amelyet egyenesek alkotnak.

A QColor osztály használatával színinformációkat tárolhat. A Qt környezet 3 színmodellt támogat: RGB, CMYK és HSV. Mert színes modell Az RGB QRgb szerkezetű. A QColor osztályobjektumokban többféle szín is beállítható:

Paraméterek átadása a konstruktornak

unsigned int red = 50;

előjel nélküli int zöld = 100;

előjel nélküli int kék = 0;

előjel nélküli int alfa = 128;

QColor mycolor (piros, zöld, kék, alfa);

QRgb rgb1 = (50, 100, 0);

QColor mycolor2(rgb1);

A QColor::setRgb(), QColor::setRgba(), QColor::setRgbF(), ​​​​QColor::setHsv(), QColor::setHsvF(), QColor::setCmyk(), QColor:: metódusokkal. setCmykF( )

mycolor.setHsv(200, 100, 50);

Lehetőség van színt beállítani az egyik modellben, és leolvasni egy másikban:

előjel nélküli int h, s, v;

QColor mycolor(100, 100, 100);

mycolor.getHsv(&h, &s, &v);

Térjünk vissza a QPainter osztályhoz. A rajzolás megkezdéséhez csak létre kell hoznunk egy QPainter osztály objektumát, és át kell adni egy mutatót a rajzolandó objektumnak:

QPainter pnt(this);

pnt.drawLine(line);

void Wnd::paintEvent(QPaintEvent *event)

QLineF sor(10.0, 80.0, 90.0, 20.0);

pnt.begin(this);

pnt.drawLine(line);

A QWidget::paintEvent() metódus meghívásra kerül azokon a widgeteken, amelyeket újra kell festeni.

A legtöbb esetben a festést egyetlen QPainter objektum végzi több festési objektumon. A régi rajzbeállítások mentéséhez (ha új objektumra vált) használhatja a QPainter::save() és QPainter::restore() metódusokat. A QPainter::save() a beállításokat a verembe helyezi, a QPainter::restore() pedig feldobja őket.

Egy ábra kontúrjainak megrajzolásához át kell adnia egy QPen(pen) osztályú objektumot a QPainter osztályobjektumnak a QPainter::setPen() segítségével.

A megfelelő módszerekkel beállíthatja a toll stílusát (szín, vastagság, vonalvégek típusa).

A zárt kontúrok kitöltésére ecsetet használnak, azaz. a QBrush osztály objektuma. A QPen osztályhoz hasonlóan az ecset beállítása a QPainter::setBrush() metódussal történik. Átadhat neki egy QBrush objektumot vagy az előre meghatározott BrushStyle egyikét:

QPainter pnt(this);

pnt.setBrush(QBrush(Qt::blue, Qt::VerPattern)); // kék ecset függőleges sraffozással

A QPainter osztály lehetővé teszi az objektumok elforgatását, méretezését, mozgatását és levágását. Ezekhez a műveletekhez léteznek megfelelő módszerek: rotate(), scale(), translate(), sheap().

A Qt könyvtár támogatja az élsimítási technikát (Anti-Aliasing, anti-aliasing):

pnt.setRenderHint(QPainter:: élsimítás, igaz);

tl;dr - Qt könyvtár többplatformos ablakalkalmazások létrehozásához C++ nyelven.

A Qt, mint projekt a C++ fejlesztők azon vágyából született, hogy kényelmes eszközkészlettel rendelkezzenek a grafikus programfelületek (GUI) fejlesztéséhez. Ha például a Java-ban az AWT jön ki erre a célra, és a Python Tk-ban, akkor a C ++-ban semmi ilyesmi nem volt. És nem csak a grafikus felhasználói felület fejlesztését illetően, hanem a hálózattal, a multimédiával és más nagyon népszerű dolgokkal kapcsolatos osztályokat is. Amiért a fejlesztők nagyon bosszankodtak. Nos, ha van igény, akkor az ajánlat nem sokáig váratott magára. 1995-ben adták ki a könyvtár első kiadását. Azóta a Qt gyorsan terjeszkedett az interfészfejlesztésen túl.

Ezért a Qt-t nem annyira osztálykészletnek kell tekinteni a grafikus felhasználói felület létrehozásához, hanem inkább egy teljes osztályeszközkészletnek minden alkalomra. Ez a készlet mindent (na jó, majdnem mindent), amire egy alkalmazott programozónak szüksége lehet szinte bármilyen alkalmazás létrehozásához. A könyvtár felépítése logikusan komponensekre oszlik, rengeteg van belőlük és mindegyikkel új verzió A Qt bennük egyre hasznosabb osztályok.

Két fő összetevője van: a QtCore, amely a könyvtár magja, és a QtGui, amely a grafikus felhasználói felület összetevői. Ahogy a későbbiekben látni fogjuk, a létrehozott projektben mindig ez a két komponens található (kivéve a konzolalkalmazásokat, amelyekben a QtCore kötelező szerepet játszik).

Nos, akkor az igényektől függően a fejlesztők szabadon használhatnak bármit, amit szívük kíván. A QtNetwork hálózattal való együttműködéséhez írjon saját Torrent klienst. QtMultimedia videó/audio lejátszó megvalósításához. QtWebEngine egy teljes értékű böngészőmotor beágyazásához az alkalmazásba. És még sok más.

Azt is érdemes megjegyezni, hogy a deklarált cross-platform valóban jelen van. Előveheted az egyik rendszeren (Windows, MinGW) fejlesztett kódodat, és egy másik rendszeren (Linux, GCC) lévő fordítóval lefordíthatod, és kapsz egy binárist, ami ott minden gond nélkül lefut. Amint azt a gyakorlat megmutatta, a speciális problémák akkor kezdődnek, amikor az alkalmazást erősen súlyozzák a harmadik féltől származó könyvtárak.

Kellemes bónusz a webfejlesztők számára, hogy nem csak C ++-ban, hanem QML-ben is fejleszthetnek programokat, ami nagyon hasonlít a JavaScript-hez. Ez a Qt egy speciális fejlesztési ága, amelynek célja a gyors prototípus-készítés és mobilalkalmazás-fejlesztés.

És természetesen a Qt egyik csúcspontja a Qt Creator fejlesztői környezet. Sokoldalú és nagyon kényelmes fejlesztői környezet a Qt számára, nincs túlterhelve felesleges funkciókkal, .

Ha hibát észlel, jelöljön ki egy szövegrészt, és nyomja meg a Ctrl + Enter billentyűket
OSSZA MEG: