Windows.  Viruslar.  Noutbuklar.  Internet.  Idora.  Utilitalar.  Haydovchilar

Kirish qismi: Qt faqat elementlar haqida emas GUI. Ushbu ramka o'zaro bog'langan tizimdir. Qt ob'ektlarining o'zaro bog'liqligi QObject sinfining merosi orqali erishiladi. Va ular orasidagi aloqa signal-slot tizimi orqali amalga oshiriladi.Ushbu maqolada ushbu kutubxonaning asosiy sinflari va foydali xususiyatlari tasvirlangan. QObject Bu barcha Qt ob'ektlar uchun asosiy sinf. U signallar va slotlardan foydalanadigan har qanday sinf tomonidan meros qilib olinadi. U ob'ektlarni bir-biri bilan bog'lash imkoniyatini beradi. Buning uchun foydali funksiyalarni ham taqdim etadi. Bu bilan tanishtiramiz...

Birinchi Qt dasturi:

Qt: Qt-dagi birinchi dastur dasturchi g'oyalarini hayotga tatbiq etishning ko'plab usullariga ega bo'lgan kuchli asboblar to'plamidir. Keling, uni birinchi dasturdan o'zlashtirishni boshlaylik.Demak, qo'lingizda kompilyatorga ulangan QtCreator ishlab chiqish muhiti mavjud (masalan, MinGW). Ishlab chiqish muhitida Boshqa loyiha -> Subkataloglar bilan loyihani tanlang. Nomi: cppstudio. Bu erda qulaylik uchun biz saytdan olingan barcha ilovalarni saqlaymiz. Keling, bu yerda dars_1 nomi bilan QWidget loyihasini yaratamiz va mainwindows.h, mainwindows.cpp, ... fayllarini oʻchirib tashlaymiz.

Kirish - Qt Graphics Library

Qt - bepul, keng qo'llaniladigan C++ grafik kutubxonasi. U nafaqat grafiklarni, balki tarmoqni, ma'lumotlar bazalarini va boshqalarni ham qo'llab-quvvatlaydigan ko'plab komponentlarni o'z ichiga oladi. Umumiy ma'lumot: Foydalanishning boshidan dasturchi o'zaro bog'langan ramka oladi. Bu dasturning ko'p qismini yozishda faqat o'rnatilgan sinflardan foydalanish va ma'lum bir OT bilan aloqani deyarli butunlay tark etish imkonini beradi. Ushbu yondashuv ishlab chiquvchining mustaqilligi va erkinligini amalga oshiradi. (Dasturni bir nechta uchun qayta yozishning hojati yo'q operatsion tizimlar. Windows uchun algoritmni kompilyatsiya qilish mumkin ...

Bir kunlik post hayotdan so'ng, men karma oqayotganini seza boshladim, shuning uchun maqoladagi taqdimotning qabul qilinishi mumkin bo'lmagan uslubi va sub'ektivlik uchun oldindan uzr so'rayman.

Salom, Xabraxabr!

So'nggi paytlarda men Xubrikdagi Qt mavzusining mashhurligiga e'tibor bermay qo'ya olmadim, ammo shunga qaramay, sharhlarda men yolg'on va tushunarsiz narsalarni aytadigan odamlarni ko'rishda davom etaman. Ushbu post bilan men Qt haqidagi ba'zi noto'g'ri tushunchalarni yo'q qilishni va nima uchunligini aytmoqchi edim Java/Obj-C/.NET-dan yumshoq va yumshoq Qt-ga o'tishingiz kerak.

Kesish ostida juda ko'p taassurotlar, sub'ektivliklar va bu boradagi kamtarona fikrlarim bo'ladi eng ajoyib ilovalarni ishlab chiqish uchun asos. Biroq, maqolam hech bo'lmaganda texnik jihatdan foydali ma'noga ega bo'lishi uchun qiziqarli narsalarni qo'shishga harakat qilaman. Umid qilamanki, bu qiziqarli o'qish bo'ladi va sizga yoqadi.

Qani boshladik?

Veshch №1. C++ API

Hech kimga sir emaski, Qt juda qulay APIga ega va aniqrog'i, qtbase moduli ko'pgina kundalik vazifalar uchun etarli miqdordagi sinflarni o'z ichiga oladi ( Qt GUI ramkasidan ko'proqdir). Men uch yil oldin maqolamda STL konteyner o'rashlari haqida gapirgan edim - . Satrlar bilan ishlash, disk raskadrovka natijalari va boshqa ko'p narsalar uchun sinflar ham kiritilgan.

QString mevalar = "olma, banan, apelsin, banan"; QStringList fruitsList = fruits.split(", "); qDebug()<< fruitsList; // выведет в консоль [ "apple", "banana", "orange", "banana" ] fruitsList.removeDuplicates(); fruits = fruitsList.join(", "); qDebug() << fruits; // выведет в консоль "apple, banana, orange"
Shuni aytish kerakki, Qt XML va ma'lumotlar bazalari bilan qulay ishlash uchun modullarga ega ( mazali-mazali MVC kutesh tizimining integratsiyasi bilan), OpenGL, audio/video ish (Phonon), tarmoq dasturlash, WebKit2. O'rtacha loyiha oldida turgan vazifalar uchun bu oshxona 90% hollarda etarli bo'ladi va modullar bilan bog'liq muammolar kamdan-kam hollarda bo'ladi.

C++ ga bo'lgan sevgimni hisobga olsak, men Qt-ning platformalararo darajadagi turli xil ahamiyatsiz bo'lmagan narsalarni qo'llab-quvvatlashidan juda mamnunman. Bir necha marta men ayniqsa tushunarsiz daqiqalarni hal qilishim kerak edi, lekin bu shunday.

Veshch № 2. Qt Tez

Qt Quick - bu grafik foydalanuvchi interfeysini yaratish uchun o'ta silliq yondashuv. JavaScript-ga o'xshash QML (u qayerda ixtiro qilinganligini taxmin qiling) deb nomlangan deklarativ tildan foydalanib, ilovalarda interfeysni prototiplashda yuqori mahsuldorlikka erishishingiz mumkin. har qanday qiyinchiliklar. Va kulgili tomoni shundaki, bu kabi ishlar bilan Hatto JavaScript sintaksisini biladigan dizayner ham interfeys prototipini boshqarishi mumkin. Agar men sizga funktsional kod misolini ko'rsatmaganimda bularning barchasi bo'sh so'zlar bo'lar edi (batafsil ma'lumotni Qt loyihasida topish mumkin - u erda).

Import QtQuick 2.0 Rectangle ( id: sahifa kengligi: 320; balandlik: 480 rang: "och gray" Matn ( id: helloMatn matni: "Salom dunyo!" y: 30 anchors.horizontalCenter: page.horizontalCenter font.pointSize: 24; shrift. qalin: rost ) Grid (id: colorPicker x: 4; anchors.bottom: page.bottom; anchors.bottomMargin: 4 qator: 2; ustunlar: 3; interval: 3 katak ( cellColor: "qizil"; onClicked: helloText.color = cellColor ) Hujayra ( cellColor: "yashil"; onClicked: helloText.color = cellColor ) Hujayra ( cellColor: "blue"; onClicked: helloText.color = cellColor ) Hujayra ( cellColor: "sariq"; onClicked: helloTextcolor. ) Hujayra ( cellColor: "steelblue"; onClicked: helloText.color = cellColor ) Hujayra ( cellColor: "black"; onClicked: helloText.color = cellColor ) )

Hujayra ob'ektini amalga oshirish juda ahamiyatsiz va shu tarzda aniqlanadi

import QtQuick 2.0 Item ( id: konteyner xususiyati taxallus cellColor: rectangle.color signal bosildi(rangli hujayraColor) eni: 40; balandlik: 25 Rectangle (id: rectangle border.color: "oq" anchors.fill: ota ) MouseArea ( anchors. to'ldirish: ota onClicked: container.clicked(container.cellColor) ) )

Ushbu kodda bitta C++ qatori yo'q va u yaxshi ishlaydi. Bu yaxshi, shunday emasmi? Bu hatto o'zimni sehrgardek his qildim - bunday dasturni yig'ishdan ko'ra non sotib olish uchun do'konga borish osonroq. Biroq, murakkab ilovalarda QMLning o'zi etarli emas va biz uni C++ bilan birlashtiramiz. Bu Qt Software markazidagi ko'plab maqolalarda muhokama qilingan - masalan, .

Veshch № 3. Jamiyat

Xo'sh, biz yoqimli daqiqaga yetdik. Agar men haqimda gapiradigan bo'lsak, men Qt bilan nisbatan kam ishladim - atigi 5 yil. Qt yillik tadbirlarni o'tkazadi - Qt Developer Days va Qt Contributors "Summit. Men ularning har birida bir marta, o'tgan yili bo'lganman va menga juda yoqdi - tayyorgarlik darajasi yuqori va taassurotlar yetkazildi. Men ham muloqot qilishim kerak edi. Qt "faxriylari" - sammitda 10 yildan beri qatnashayotgan insonlar. Bunday loyihaning o'sishini o'z ko'zingiz oldida ko'rish va barcha rivojlanish markazida bo'lish qanchalik ajoyib ekanligini tasavvur qila olaman - shunchaki mazali.

Bu odamlar juda bag'rikeng va yangi kelganlarga yaxshi munosabatda bo'lishadi, bunday ajoyib odamlar bilan aloqa o'rnatish men uchun juda oson va qulay edi. Qt loyihasida har kim o'z savoliga javob olishi mumkin bo'lgan forumlar mavjud. Bu kulgili, lekin bu haqiqatan ham yomon juda jonli va u erda haqiqatan ham Qt ni o'rganish jarayonida yuzaga keladigan savollarga javob berish.

Veshch № 4. Ochiq manba va kodni ko'rib chiqish

Soretz Cut, asosan, Digia (comm. support +), KDAB, ICS va g'ayratli ishlab chiquvchilar tomonidan ochiq ishlab chiqilgan. Hamma narsa Gitorious - Tadamts-da joylashgan. Loyihaning rivojlanishiga hissa qo'shish uchun siz o'tishingiz kerak qattiq kodni tekshirish - avtomatlashtirilgan (men ilgari yozgan kod uslubiga muvofiqligi -) va inson - sizning kodingiz sizga ishonmaydigan soqolli erkaklar tomonidan ko'rib chiqiladi va kodingizdan orqa eshiklarni qidiradi. Bularning barchasi juda murakkab jarayon (Git bilan bog'liq muammolar / Ko'rib chiqish kengashida qayta ko'rib chiqish) va men shu kunlarning birida bu haqda maqola yozaman.

Aytgancha, menda qtbase daraxtida bir nechta majburiyatlar bor, shuning uchun siz menga PM orqali so'rashingiz mumkin va men sizning savollaringizga javob berishga harakat qilaman.

Veshch № 5. Loyihaning rivojlanish dinamikasi

Qt ko'p yillar davomida, 90-yillarning oxiridan beri ishlab chiqilmoqda. Bu vaqt ichida Trolltech va Nokia kabi kompaniyalar allaqachon o'zining tijorat versiyasini etarlicha o'ynagan va hozir Digia buni qilmoqda. Lekin bir narsa aniq, loyiha tirik va rivojlanmoqda. Yana bir necha yil davomida hamma vidjetlarda dizayn yozdi (C++ sinflari, ularning barchasi QWidget asosida), lekin bugungi kunda hatto kichkina bola ham buni qila oladi. Menimcha, bunga parallel ravishda eng kuchli narsa faol rivojlanmoqda - Qt Creator, bugungi kunda nafaqat Qt dasturchilariga yoqadi!

^ ajoyib Qt Creator, unda siz mo''jizalar yaratishingiz mumkin va buning uchun hech narsa olmaysiz.

Afsuski, menda qat'iy raqamlar yo'q, lekin ular kod har kuni optimallashtirilganligini va kodlar bazasi ehtiyotkorlik bilan kengaytirilganligini aytishadi - yangi xususiyatlar qo'shiladi va eski xatolar tuzatiladi (men buni ko'p marta ko'rganman). Bularning barchasi juda mos keladi va xursand bo'lish mumkin emas.

Bundan tashqari, platformalar hozir faol rivojlanmoqda iOS, Android, Windows Phone, endi ular uchun dasturlarni kompilyatsiya qilishingiz mumkin!

Pastki chiziq

O'ylaymanki, siz Qtning haqiqatan ham zo'r ekanligini tushunasiz va maqolani o'qib chiqqandan so'ng siz ham men kabi uni sevib qoldingiz.
E'tiboringiz uchun rahmat!

Bir kunlik post hayotdan so'ng, men karma oqayotganini seza boshladim, shuning uchun maqoladagi taqdimotning qabul qilinishi mumkin bo'lmagan uslubi va sub'ektivlik uchun oldindan uzr so'rayman.

Salom, Xabraxabr!

So'nggi paytlarda men Xubrikdagi Qt mavzusining mashhurligiga e'tibor bermay qo'ya olmadim, ammo shunga qaramay, sharhlarda men yolg'on va tushunarsiz narsalarni aytadigan odamlarni ko'rishda davom etaman. Ushbu post bilan men Qt haqidagi ba'zi noto'g'ri tushunchalarni yo'q qilishni va nima uchunligini aytmoqchi edim Java/Obj-C/.NET-dan yumshoq va yumshoq Qt-ga o'tishingiz kerak.

Kesish ostida juda ko'p taassurotlar, sub'ektivliklar va bu boradagi kamtarona fikrlarim bo'ladi eng ajoyib ilovalarni ishlab chiqish uchun asos. Biroq, maqolam hech bo'lmaganda texnik jihatdan foydali ma'noga ega bo'lishi uchun qiziqarli narsalarni qo'shishga harakat qilaman. Umid qilamanki, bu qiziqarli o'qish bo'ladi va sizga yoqadi.

Qani boshladik?

Veshch №1. C++ API

Hech kimga sir emaski, Qt juda qulay APIga ega va aniqrog'i, qtbase moduli ko'pgina kundalik vazifalar uchun etarli miqdordagi sinflarni o'z ichiga oladi ( Qt GUI ramkasidan ko'proqdir). Men uch yil oldin - tytsk - maqolamda STL konteynerlari uchun o'ramlar haqida gapirgan edim. Satrlar bilan ishlash, disk raskadrovka natijalari va boshqa ko'p narsalar uchun sinflar ham kiritilgan.

QString mevalar = "olma, banan, apelsin, banan"; QStringList fruitsList = fruits.split(", "); qDebug()<< fruitsList; // выведет в консоль [ "apple", "banana", "orange", "banana" ] fruitsList.removeDuplicates(); fruits = fruitsList.join(", "); qDebug() << fruits; // выведет в консоль "apple, banana, orange"
Shuni aytish kerakki, Qt XML va ma'lumotlar bazalari bilan qulay ishlash uchun modullarga ega ( mazali-mazali MVC kutesh tizimining integratsiyasi bilan), OpenGL, audio/video ish (Phonon), tarmoq dasturlash, WebKit2. O'rtacha loyiha oldida turgan vazifalar uchun bu oshxona 90% hollarda etarli bo'ladi va modullar bilan bog'liq muammolar kamdan-kam hollarda bo'ladi.

C++ ga bo'lgan sevgimni hisobga olsak, men Qt-ning platformalararo darajadagi turli xil ahamiyatsiz bo'lmagan narsalarni qo'llab-quvvatlashidan juda mamnunman. Bir necha marta men ayniqsa tushunarsiz daqiqalarni hal qilishim kerak edi, lekin bu shunday.

Veshch № 2. Qt Tez

Qt Quick - bu grafik foydalanuvchi interfeysini yaratish uchun o'ta silliq yondashuv. JavaScript-ga o'xshash QML (u qayerda ixtiro qilinganligini taxmin qiling) deb nomlangan deklarativ tildan foydalanib, ilovalarda interfeysni prototiplashda yuqori mahsuldorlikka erishishingiz mumkin. har qanday qiyinchiliklar. Va kulgili tomoni shundaki, bu kabi ishlar bilan Hatto JavaScript sintaksisini biladigan dizayner ham interfeys prototipini boshqarishi mumkin. Agar men sizga funktsional kod misolini ko'rsatmaganimda bularning barchasi bo'sh so'zlar bo'lar edi (batafsil ma'lumotni Qt loyihasida topish mumkin - u erda).

Import QtQuick 2.0 Rectangle ( id: sahifa kengligi: 320; balandlik: 480 rang: "och gray" Matn ( id: helloMatn matni: "Salom dunyo!" y: 30 anchors.horizontalCenter: page.horizontalCenter font.pointSize: 24; shrift. qalin: rost ) Grid (id: colorPicker x: 4; anchors.bottom: page.bottom; anchors.bottomMargin: 4 qator: 2; ustunlar: 3; interval: 3 katak ( cellColor: "qizil"; onClicked: helloText.color = cellColor ) Hujayra ( cellColor: "yashil"; onClicked: helloText.color = cellColor ) Hujayra ( cellColor: "blue"; onClicked: helloText.color = cellColor ) Hujayra ( cellColor: "sariq"; onClicked: helloTextcolor. ) Hujayra ( cellColor: "steelblue"; onClicked: helloText.color = cellColor ) Hujayra ( cellColor: "black"; onClicked: helloText.color = cellColor ) )

Hujayra ob'ektini amalga oshirish juda ahamiyatsiz va shu tarzda aniqlanadi

import QtQuick 2.0 Item ( id: konteyner xususiyati taxallus cellColor: rectangle.color signal bosildi(rangli hujayraColor) eni: 40; balandlik: 25 Rectangle (id: rectangle border.color: "oq" anchors.fill: ota ) MouseArea ( anchors. to'ldirish: ota onClicked: container.clicked(container.cellColor) ) )

Ushbu kodda bitta C++ qatori yo'q va u yaxshi ishlaydi. Bu yaxshi, shunday emasmi? Bu hatto o'zimni sehrgardek his qildim - bunday dasturni yig'ishdan ko'ra non sotib olish uchun do'konga borish osonroq. Biroq, murakkab ilovalarda QMLning o'zi etarli emas va biz uni C++ bilan birlashtiramiz. Bu Qt Software markazining ko'plab maqolalarida muhokama qilingan - masalan, u erda.

Veshch № 3. Jamiyat

Xo'sh, biz yoqimli daqiqaga yetdik. Agar men haqimda gapiradigan bo'lsak, men Qt bilan nisbatan kam ishladim - atigi 5 yil. Qt yillik tadbirlarni o'tkazadi - Qt Developer Days va Qt Contributors "Summit. Men ularning har birida bir marta, o'tgan yili bo'lganman va menga juda yoqdi - tayyorgarlik darajasi yuqori va taassurotlar yetkazildi. Men ham muloqot qilishim kerak edi. Qt "faxriylari" - sammitda 10 yildan beri qatnashayotgan insonlar. Bunday loyihaning o'sishini o'z ko'zingiz oldida ko'rish va barcha rivojlanish markazida bo'lish qanchalik ajoyib ekanligini tasavvur qila olaman - shunchaki mazali.

Bu odamlar juda bag'rikeng va yangi kelganlarga yaxshi munosabatda bo'lishadi, bunday ajoyib odamlar bilan aloqa o'rnatish men uchun juda oson va qulay edi. Qt loyihasida har kim o'z savoliga javob olishi mumkin bo'lgan forumlar mavjud. Bu kulgili, lekin bu haqiqatan ham yomon juda jonli va u erda haqiqatan ham Qt ni o'rganish jarayonida yuzaga keladigan savollarga javob berish.

Veshch № 4. Ochiq manba va kodni ko'rib chiqish

Soretz Cut, asosan, Digia (comm. support +), KDAB, ICS va g'ayratli ishlab chiquvchilar tomonidan ochiq ishlab chiqilgan. Hamma narsa Gitorious - Tadamts-da joylashgan. Loyihaning rivojlanishiga hissa qo'shish uchun siz o'tishingiz kerak qattiq kodni tekshirish - avtomatlashtirilgan (men allaqachon yozgan kod uslubiga muvofiqligi - ptsss) va inson - sizning kodingiz sizga ishonmaydigan soqolli erkaklar tomonidan ko'rib chiqiladi va kodingizdan orqa eshiklarni qidiradi. Bularning barchasi juda murakkab jarayon (Git bilan bog'liq muammolar / Ko'rib chiqish kengashida qayta ko'rib chiqish) va men shu kunlarning birida bu haqda maqola yozaman.

Aytgancha, menda qtbase daraxtida bir nechta majburiyatlar bor, shuning uchun siz menga PM orqali so'rashingiz mumkin va men sizning savollaringizga javob berishga harakat qilaman.

Veshch № 5. Loyihaning rivojlanish dinamikasi

Qt ko'p yillar davomida, 90-yillarning oxiridan beri ishlab chiqilmoqda. Bu vaqt ichida Trolltech va Nokia kabi kompaniyalar allaqachon o'zining tijorat versiyasini etarlicha o'ynagan va hozir Digia buni qilmoqda. Lekin bir narsa aniq, loyiha tirik va rivojlanmoqda. Yana bir necha yil davomida hamma vidjetlarda dizayn yozdi (C++ sinflari, ularning barchasi QWidget asosida), lekin bugungi kunda hatto kichkina bola ham buni qila oladi. Menimcha, bunga parallel ravishda eng kuchli narsa faol rivojlanmoqda - Qt Creator, bugungi kunda nafaqat Qt dasturchilariga yoqadi!

^ ajoyib Qt Creator, unda siz mo''jizalar yaratishingiz mumkin va buning uchun hech narsa olmaysiz.

Afsuski, menda qat'iy raqamlar yo'q, lekin ular kod har kuni optimallashtirilganligini va kodlar bazasi ehtiyotkorlik bilan kengaytirilganligini aytishadi - yangi xususiyatlar qo'shiladi va eski xatolar tuzatiladi (men buni ko'p marta ko'rganman). Bularning barchasi juda mos keladi va xursand bo'lish mumkin emas.

Bundan tashqari, platformalar hozir faol rivojlanmoqda iOS, Android, Windows Phone, endi ular uchun dasturlarni kompilyatsiya qilishingiz mumkin!

Pastki chiziq

O'ylaymanki, siz Qtning haqiqatan ham zo'r ekanligini tushunasiz va maqolani o'qib chiqqandan so'ng siz ham men kabi uni sevib qoldingiz.
E'tiboringiz uchun rahmat!

Ma'ruza va laboratoriya ishi

Tarif bo'yicha: OS

Mavzu bo'yicha: Qt dasturlash muhiti

Bajarildi:

A-06-09 guruh talabalari

Smirnov Andrey

Marugin Mixail

1.Kirish

2.Tarix

3. Atrof-muhitning rivojlanishi

4. Qo'llash doirasi

5.Umumiy ma'lumot

6. Komponentlar

7. Rivojlanish muhiti

8.Qt Creator bilan ishlash

9. Misollar

10. Laboratoriyaga topshiriq

Kirish

Bundan tashqari, boshqa ko'plab dasturlash tillari uchun "bog'lanishlar" mavjud: Python - PyQt, Ruby - QtRuby, Java - Qt Jambi, PHP - PHP-Qt va boshqalar.

Ko'pgina zamonaviy operatsion tizimlarda uning yordami bilan yozilgan dasturiy ta'minotni manba kodini o'zgartirmasdan oddiygina har bir OT uchun dasturni kompilyatsiya qilish orqali ishga tushirishga imkon beradi. Grafik interfeys elementlaridan tortib tarmoq, ma'lumotlar bazalari va XML bilan ishlash sinflarigacha bo'lgan amaliy dasturiy ta'minotni ishlab chiqishda talab qilinishi mumkin bo'lgan barcha asosiy sinflarni o'z ichiga oladi. Qt to'liq ob'ektga yo'naltirilgan, osongina kengaytirilishi mumkin va komponentlarga asoslangan dasturlash usullarini qo'llab-quvvatlaydi.

4.5 versiyasidan boshlab Qt turli litsenziyalar ostida tarqatildi. Bu shuni anglatadiki, agar siz tijorat ilovalarini yaratmoqchi bo'lsangiz, siz Qt tijorat litsenziyasini sotib olishingiz kerak; Agar siz ochiq kodli dastur yaratayotgan bo'lsangiz, GPL litsenziyasi bilan versiyadan foydalanishingiz mumkin.

Hikoya

Qt ishlab chiqish vositalari birinchi marta 1995 yil may oyida ommaga ma'lum bo'ldi. Qt dastlab Haarvard Nord va Erik Chamb-Ing tomonidan ishlab chiqilgan.

1991 yilda Haarvard Erik bilan birgalikda dizayn qarorlari qabul qilingan holda Qt ni samarali shakllantirgan sinflarni yozishni boshladi.

Keyingi yili Irik "signallar va slotlar" g'oyasini o'ylab topdi - oddiy, ammo kuchli GUI dasturlash paradigmasi hozirda bir nechta boshqa vositalar tomonidan qabul qilingan.

1993 yilga kelib, Haarward va Eirik birinchi Qt grafik dvigatelini ishlab chiqdilar va o'zlarining vidjetlarini yaratishlari mumkin edi.

Qiziqarsiz eslatmalar: "Q" harfi sinf prefiksi sifatida tanlangan, chunki u Haarward ishlatgan Emacs shriftida chiroyli ko'rinishga ega edi. "Asboblar to'plami" degan ma'noni anglatish uchun "t" harfi qo'shildi.

Rivojlanish

1995 yil aprel oyida Norvegiyaning Metis kompaniyasi ular bilan Qt asosida dasturiy ta'minotni ishlab chiqish bo'yicha shartnoma imzoladi.

1995 yil 26 may - Qt ning birinchi ommaviy versiyasi. Qt Windows va Unix ishlanmalarida ishlatilishi mumkin edi va dasturiy ta'minot interfeysi ikkala platformada ham bir xil edi.



1996 yildan 2001 yilgacha - Qt3 versiyasini ishlab chiqish. Qt endi Windows, Mac Os X va Unix tizimlarida ishlagan.

2005 yil yozi - Qt 4.0 chiqarildi. 500 ga yaqin sinflar va 9000 dan ortiq funksiyalar bilan Qt 4 har qanday oldingi versiyadan kattaroq va boyroq; u bir nechta kutubxonalarga bo'lingan, shuning uchun ishlab chiquvchilar Qt ning faqat kerakli qismlaridan foydalanishlari mumkin.

Bugungi kunda versiya Qt4.8

Qt 4 oldingi versiyalarga nisbatan katta yaxshilanishdir; u kuchli va ishlatish uchun qulay konteyner sinflarining mutlaqo yangi to'plamini, takomillashtirilgan model/ko'rinish arxitektorlari funksionalligini, tez va moslashuvchan 2D grafik ramkasini va Unicode matnini ko'rish va tahrirlash uchun kuchli sinflarni o'z ichiga oladi, shu jumladan minglab kichik yaxshilanishlar haqida gapirmasa ham bo'ladi. sinflarning butun spektri Qt.

Qt 4 - Qt ning birinchi versiyasi, ham tijorat, ham ochiq kodli ishlab chiqish uchun barcha qo'llab-quvvatlanadigan platformalarda mavjud.

Qo'llash sohasi

Windows, Linux, Mac OS X uchun ish stoli ilovalarini yaratish qobiliyati (konsolda ham, oynali grafik interfeys bilan ham). So'nggi bir necha yil ichida ishlab chiqarilgan mobil qurilmalar sonini ko'paytirish tendentsiyasi kuzatildi. Natijada Qt mobil platformalarga ko'chirildi: Symbian, Maemo, MeeGo. Qt Lighthouse-ni Android platformasiga ko'chirishning muvaffaqiyatli tajribasi haqida ham bilamiz.

Umumiy ma'lumot

Ko'pgina zamonaviy operatsion tizimlarda uning yordami bilan yozilgan dasturiy ta'minotni manba kodini o'zgartirmasdan oddiygina har bir OT uchun dasturni kompilyatsiya qilish orqali ishga tushirishga imkon beradi.

Grafik interfeys elementlaridan tortib tarmoq, ma'lumotlar bazalari va XML bilan ishlash sinflarigacha bo'lgan amaliy dasturiy ta'minotni ishlab chiqishda talab qilinishi mumkin bo'lgan barcha asosiy sinflarni o'z ichiga oladi.

Qt to'liq ob'ektga yo'naltirilgan, osongina kengaytirilishi mumkin va komponentlarga asoslangan dasturlash usullarini qo'llab-quvvatlaydi.

Kutubxonaning Microsoft Windows, X11 grafik quyi tizimiga ega UNIX-sinf tizimlari, iOS, Android, Mac OS X, Microsoft Windows CE, QNX, oʻrnatilgan Linux tizimlari va S60 platformasi uchun versiyalari mavjud. Hozirda Windows Phone’ga Qt qo‘llab-quvvatlashini joriy etish imkoniyati ko‘rib chiqilmoqda. Xaykuga portlash ham davom etmoqda.

Qt ning boshqa kutubxonalardan o'ziga xos xususiyati foydalanishdir Meta ob'ekt kompilyatori (MOC)- dastlabki manba kodini qayta ishlash tizimi (umuman, Qt sof C++ uchun emas, balki uning maxsus tili uchun kutubxona bo'lib, undan MOC har qanday standart C++ kompilyatori tomonidan keyinchalik kompilyatsiya qilish uchun “tarjima qilinadi”). MOC sizga uyalar va signallar kabi tushunchalarni kiritish orqali kutubxonalar kuchini ko'p marta oshirish imkonini beradi. Bundan tashqari, bu kodni yanada ixcham qilish imkonini beradi. MOC yordam dasturi Q_OBJECT makrosini o'z ichiga olgan sinf ta'riflari uchun C++ sarlavhali fayllarini qidiradi va metaobject kodini o'z ichiga olgan qo'shimcha C++ manba faylini yaratadi.

Qt o'z plaginlaringizni yaratish va ularni to'g'ridan-to'g'ri vizual muharrir paneliga joylashtirish imkonini beradi. Shuningdek, oyna o'lchami o'zgartirilganda ularni ekranda joylashtirish, ko'rsatish va qayta chizish bilan bog'liq vidjetlarning odatiy funksiyalarini kengaytirish imkoniyati mavjud.

Qt, WYSIWYG rejimida dialoglar va shakllar yaratish imkonini beruvchi Qt Designer deb nomlangan vizual grafik interfeysni ishlab chiqish muhiti bilan birga keladi.

Qt taqsimoti "Qt Linguist" ni o'z ichiga oladi - dasturni mahalliylashtirish va ko'plab tillarga tarjima qilishni soddalashtirishga imkon beruvchi grafik yordam dasturi; va "Qt Assistant" - kutubxona hujjatlari bilan ishlashni osonlashtiradigan Qt yordam tizimi, shuningdek, Qt asosida ishlab chiqilgan dasturiy ta'minot uchun platformalararo yordam yaratish imkonini beradi. 4.5.0 versiyasidan boshlab, Qt to'plami kod muharriri, yordam, Qt Designer grafik vositalari va ilovalarni disk raskadrovka qilish qobiliyatini o'z ichiga olgan Qt Creator ishlab chiqish muhitini o'z ichiga oladi. "Qt Creator" kompilyator sifatida GCC yoki Microsoft VC++ dan, tuzatuvchi sifatida GDB dan foydalanishi mumkin. Windows versiyalari uchun kutubxona kompilyator, MinGW sarlavhasi va obyekt fayllari bilan jihozlangan.

Komponentlar(Keling, bir juftlikni ajratib ko'rsatamiz )

Kutubxona bir nechta modullarga bo'lingan, kutubxonaning to'rtinchi versiyasi uchun u:

QtCore- boshqa modullar tomonidan ishlatiladigan kutubxona asosiy sinflari;

QtGui- grafik interfeys komponentlari;

QtNetwork- tarmoq dasturlash uchun sinflar to'plami. Turli xil yuqori darajadagi protokollarni qo'llab-quvvatlash versiyadan versiyaga farq qilishi mumkin. 4.2.x versiyasida FTP va HTTP protokollari bilan ishlash sinflari mavjud. QTcpServer, TCP uchun QTcpSocket va UDP uchun QUdpSocket kabi sinflar TCP/IP protokollari bilan ishlashga mo'ljallangan;

QtOpenGL- OpenGL bilan ishlash uchun sinflar to'plami;

QtSql- SQL tuzilgan so'rovlar tilidan foydalangan holda ma'lumotlar bazalari bilan ishlash uchun sinflar to'plami. 4.2.x versiyasida ushbu modulning asosiy sinflari: QSqlMa'lumotlar bazasi- ma'lumotlar bazasiga ulanishni ta'minlash uchun sinf; ma'lum bir ma'lumotlar bazasi bilan ishlash uchun QSqlDriver sinfidan meros bo'lib qolgan ob'ekt talab qilinadi - ma'lum bir ma'lumotlar bazasi uchun amalga oshiriladigan va kompilyatsiya qilish uchun ma'lumotlar bazasi SDK ni talab qilishi mumkin bo'lgan mavhum sinf. Masalan, FireBird/InterBase ma'lumotlar bazasi uchun drayverni yaratish uchun ushbu ma'lumotlar bazasi uchun yetkazib berish to'plamiga kiritilgan .h fayllari va statik bog'lovchi kutubxonalar kerak;

QtScript- Qt skriptlari bilan ishlash darslari;

QtSvg- Scalable Vector Graphics (SVG) ma'lumotlarini ko'rsatish va ular bilan ishlash sinflari;

QtXml- XML ​​bilan ishlash moduli, SAX va DOM ish modellarini qo'llab-quvvatlaydi;

QtDesigner- o'z vidjetlaringiz uchun QtDesigner kengaytmalarini yaratish sinflari;

QtUITools- ilovada Qt Designer shakllarini qayta ishlash sinflari;

QtAssistant- ma'lumot tizimi;

Qt3Support- Qt kutubxonasining 3.x.x versiyasi bilan muvofiqligi uchun zarur bo'lgan sinflarga ega modul;

QtTest- UNIT testlari bilan ishlash moduli;

QtWebKit- Qt-ga integratsiyalangan va uning sinflari orqali kirish mumkin bo'lgan WebKit moduli;

QtXmlPatterns- XQuery 1.0 va XPath 2.0 ni qo'llab-quvvatlaydigan modul;

Fonon- mahalliy va qurilmalardan va tarmoq orqali video va audioni tinglash va yozib olishni qo'llab-quvvatlash moduli;

QtCLucene- Qt 4.4 da Assistantning yangi versiyasida qo'llaniladigan to'liq matnli qidiruvni qo'llab-quvvatlash moduli;

ActiveQt- Windows ostida Qt ishlab chiquvchilari uchun ActiveX va COM texnologiyalari bilan ishlash moduli.

QtDeklarativ- dinamik, moslashtirilgan foydalanuvchi interfeyslarini yaratish uchun deklarativ asosni ta'minlovchi modul.

Kutubxona o'zining .pro fayli deb nomlangan loyiha formatidan foydalanadi, unda qanday fayllar kompilyatsiya qilinishi, sarlavha fayllarini qanday izlash yo'llari va boshqa ko'plab ma'lumotlar haqida ma'lumot mavjud.

Keyinchalik, qmake yordam dasturidan foydalanib, ular kompilyator make yordam dasturi uchun makefile yaratish uchun ishlatiladi. Microsoft Visual Studio 2003/2005/2008/2010 bilan integratorlar yordamida ham ishlash mumkin. Yaqinda Eclipse-ga integratsiya kutubxonaning 4.x.x versiyasi uchun mavjud bo'ldi.

Java ishlab chiquvchilari Qt-dan bir xil ishlab chiqaruvchining Qt Jambi ramkasidan foydalangan holda foydalanishlari mumkin (Qt Software 2009 yilda ushbu ramkani ishlab chiqishni rasman to'xtatgan).

«+»

Qt loyihasining muhim afzalliklaridan biri bu yuqori sifatli hujjatlarning mavjudligi. Hujjatlar haqidagi maqolalar ko'plab misollar bilan ta'minlangan. Kutubxonaning manba kodi yaxshi formatlangan, keng sharhlangan va o'qish oson, bu esa Qt ni o'rganishni osonlashtiradi.

Rivojlanish muhiti

Qt Creator - bu C, C++ va QML tillarida ishlab chiqish uchun platformalararo bepul IDE. Qt ramkasi bilan ishlash uchun Trolltech (Nokia) tomonidan ishlab chiqilgan. QtWidgets va QML yordamida grafik tuzatuvchi interfeysi va vizual interfeysni ishlab chiqish vositalarini o'z ichiga oladi. Qo'llab-quvvatlanadigan kompilyatorlar: Gcc, Clang, MinGW, MSVC, Linux ICC, GCCE, RVCT, WINSCW.

Qt Creator-ning asosiy maqsadi turli platformalarda Qt ramkasidan foydalangan holda ilovalarni ishlab chiqishni soddalashtirishdir. Shu sababli, har qanday ishlab chiqish muhitiga xos xususiyatlar orasida QML-dagi ilovalarni disk raskadrovka qilish va Qt konteynerlaridan ma'lumotlarni tuzatuvchida ko'rsatish, QML va QtWidgets-da o'rnatilgan interfeys dizayneri kabi o'ziga xos xususiyatlar ham mavjud.

Qt Creator da ishlash

Qt Creator yangi loyihalar, shakllar, sinf fayllari va hokazolarni yaratish uchun qulay "sehrgar" ga ega. Asosiy oyna uchun ui faylini yaratish o'rniga, vizual dasturlash sohasiga tegmasdan loyihaga oddiy kodni kiritishingiz mumkin. Loyihani yaratish yoki ochgandan so'ng, rivojlanish muhitining o'zi bizning oldimizda paydo bo'ladi. Avvaliga u g'ayrioddiy ko'rinadi. Misol uchun, mashhur yorliqlar (tikanlar bilan yorliqlar) yo'q. To'g'rirog'i, ular tahrirlovchi fayllardan tashqari hamma narsa uchun mavjud. Fayllarning o'zi ikkita ro'yxatda mavjud: loyiha fayllari (sukut bo'yicha chap panelda) va allaqachon ochiq fayllar (muharrir panelining yuqori qatorida). Nega tablardan voz kechishga qaror qildingiz? Menimcha, bu ekran maydonini tejash uchun.

Yana bir g'ayrioddiy nuqta juda nisbiydir, chunki "muloqotsiz" interfeysi uzoq vaqtdan beri ba'zi boshqa dasturlar (masalan, TEA muharriri) tomonidan qabul qilingan. Qt Creator-da matnni qidirish va almashtirish uchun kiritish maydonchalari paydo bo'ladi va siz matn kiritganingizda, topilgan mosliklar muharrirda darhol ta'kidlanadi. Keyinchalik qidirish uchun F3 mavjud va almashtirish uchun alohida kiritish maydoni mavjud. Variantlar ham yaqin joyda joylashgan. Bularning barchasi tufayli bunday operatsiyalar tez va qulay tarzda amalga oshiriladi. Xuddi shu narsa ma'lumot va disk raskadrovka panellariga ham tegishli: modallik yo'qligi, asosiy oynani bir-biriga yopishgan keraksiz oynalar va interfeys arxitekturasiga avvalgi yondashuvning boshqa zavqlari. Hammasi bitta asosiy oynada!

Qt Creator, shuningdek, kod muharriri haqida g'amxo'rlik qildi. Bugungi kunda sintaksisni ta'kidlashdan kam odam hayratga tushishi mumkin, shuning uchun boshqa foydali xususiyatlarga o'tamiz. Masalan, "to'liq kod tahlilchisi" mavjud - bu muharrirning kodni dasturlash tili nuqtai nazaridan to'g'riligini tekshirish qobiliyati. Kodni kiritganingizda, uni kompilyatsiya qilishdan oldin qaerda sintaksik xatoga yo'l qo'yganingizni ko'rishingiz mumkin. Ko'p hollarda u ishlaydi, garchi istisnolar mavjud. Avtomatik yakunlash ajoyib ishlaydi: sinf namunasi nomini kiriting, nuqta yoki “->” qo'ying - va siz sinf a'zolari bilan ochiladigan ro'yxatni olasiz. Kod bloklarining katlamasi mavjud - "katlama". Biroq, men kodsiz aniqroq ekanligiga ishonaman, shuning uchun men bu variantni hech qachon ishlatmayman.

Kod orqali navigatsiya yaxshi bajarilgan - va tashqi ctaglarsiz. Kursorni funktsiya yoki o'zgaruvchi nomiga qo'ying va F2 tugmasini bosing, shundan so'ng muharrir deklaratsiya joyiga o'tadi. Shift-F2 - deklaratsiya va kod o'rtasida almashinadi va F4 - shunchaki sarlavha va cpp faylini almashtiradi. Agar sichqoncha ko'rsatkichini kodda chaqirilgan funksiya nomi ustiga olib kelsangiz, uning parametrlari haqida maslahat paydo bo'ladi.

mos yozuvlar tizimi quyidagicha ishlaydi. Aytaylik, sizning kodingizda QMenu kabi o'zgaruvchi bor. Agar kursorni uning ustiga qo'yib, F1 tugmasini bossangiz, QMenu sinfining tavsifi bilan yordam paneli paydo bo'ladi. Asosiy oynada barcha Qt hujjatlari mavjud bo'lgan Yordam yorlig'i ham mavjud.

Shunday qilib, siz ko'p vaqtingizni muharrir yorlig'ida o'tkazasiz. Nima uchun Qt Creator sozlamalarida turli muharrirlar uchun beshta bo'lim mavjud - sukut bo'yicha, skriptlar uchun, C++ uchun, loyihalar va Perforce uchun (tijoriy versiyani boshqarish tizimi) aniq emas. C++ muharriri sozlamalari Qt dasturingiz kod muharriri uchun sozlamalardir. Shuni ta'kidlaymanki, Qt Creator-ning eng so'nggi "suratlarida" shrift sozlamalari hali ham bitta bo'limda tashkil etilgan, buni kutish kerak.

Orqa yorug'lik va shriftlarni o'rnatish foydalidir, chunki standart sozlamalar bilan ishlash juda qulay emas. Birinchidan, shrift o'lchami juda kichik, ikkinchidan, #ifdef / #endif ichiga kiritilgan kod bloklari tahlilchi tomonidan "o'chirilgan kod" (Qt Creator sozlamalaridan olingan ifoda) sifatida talqin qilinadi va rangli bo'ladi. kulrang- yozilgan narsalarni tahlil qilish unchalik qulay emas. Agar sizga “katlama” yoqmasa, muharrir sozlamalarida katlama belgilarini ko‘rsatishni o‘chirib qo‘ying.

Siz tahrirlovchi maydonlarida xatcho'plar va to'xtash nuqtalarini o'rnatishingiz mumkin. Tahrirlovchi panelini cheksiz sonli ichki panellarga bo'lish mumkin - Konquerorga o'xshash. Shunday qilib, siz bir vaqtning o'zida ekranda bir nechta faylni yoki bir xil hujjatni, lekin turli joylarda tahrirlashingiz mumkin. Buning uchun avval muharrir panelini bo'lish kerak (masalan, Oyna - Split Top/Post orqali), so'ngra Oyna - Hujjatni takrorlash menyu bandini tanlang. Ushbu yondashuv ba'zan xatcho'plar orqali zerikarli navigatsiyadan ko'ra foydaliroqdir.

Qt Creator arxitekturasi plaginlarga asoslangan. Tahrirlovchi plagin, xatcho'p mexanizmi plagin, loyiha fayllari bilan panel ham plagin va hokazo. Roʻyxat o'rnatilgan plaginlar Yordam - Plaginlar haqida menyusida topishingiz mumkin. Ehtimol, kelajakda qo'shimcha plaginlarni o'rnatish mumkin bo'ladi, lekin hozirgacha men buning mexanizmini topmadim va qo'shimcha plaginlarning o'zini ham topmadim. Ammo yig'ilishlarning o'zida yangi plaginlar misli ko'rilmagan tezlikda paydo bo'ladi. Bir oy ichida Subversion va Git uchun qo'llab-quvvatlash modullari paydo bo'ldi. Umuman olganda, Qt Creator endi tabiatan vaqtinchalik. Qt Creator menyu elementlari versiyadan versiyaga o'zgartiriladi va boshqa pastki menyularga o'tkaziladi. Qo'shimcha funktsiyalar doimiy ravishda tug'ilishi haqida gapirmaslik kerak.

Keling, sozlamalar oynasiga biroz e'tibor qarataylik, xayriyatki, ularning ko'plari bor. Siz klaviatura yorliqlarini sozlashingiz va bundan tashqari ularni tashqi fayllar yordamida import/eksport qilishingiz mumkin. Bu sevimli klaviatura yorliqlarini mashinadan mashinaga o'tkazish uchun qulay. Qt Creator sukut bo'yicha ikkita oldindan o'rnatilgan faylni o'z ichiga oladi: MS Visual C++ va Xcode uchun. Avtomatik to'ldirish, chekinish, sintaksisni ajratib ko'rsatish va boshqalar bilan bog'liq barcha narsalar muharrir sozlamalarida - Matn muharriri.

Qt Creator-dagi yana bir qiziqarli vosita Locator (eski versiyalarda - Tez topish). Fokusni unga ko'chirish uchun Ctrl-K tugmalarini bosing. Oddiy qidiruv paneliga o'xshaydi, lekin xizmat qiladi tezkor qidiruv xohlaganingiz. Aniqroq aytganda, u fayllarni, fayllarni, sinflarni, funktsiyalarni qidiradi. Qidiruv vazifasini takomillashtirish uchun o'zgartiruvchi belgilarni qo'llab-quvvatlaydi. Misol uchun, siz qApp global ko'rsatgichining tavsifi uchun Qt hujjatlariga qarashni xohlaysiz. Nima qilish kerak? Ilgari siz hujjatlarni brauzer orqali ochishingiz va u erda qidirishingiz kerak edi. Ammo Qt Creator-da Locator har doim qo'lda bo'lganda, qidiruv satriga yozish kifoya qiladimi? qapp va Enter tugmasini bosing. 100-qatorga o'tingmi? Iltimos, raqamni tering va yana kiriting.

Va nihoyat, GDB tuzatuvchisi bilan o'zaro aloqaga qaytaylik. Qt Creator o'zining grafik interfeysi orqali nafaqat joriy loyihani, balki har qanday loyihani disk raskadrovka qilish imkonini beradi tashqi dastur- albatta, agar u disk raskadrovka ma'lumotlari bilan tuzilgan bo'lsa. Nosozliklarni tuzatishda har xil turdagi ma'lumotlar ko'rsatiladi alohida yorliqlar: iplar, o'zgaruvchilar, uzilish nuqtalari va qismlarga ajratish. QStringList misoli tuzatuvchida ayniqsa aniq ko'rinadi - uning barcha elementlari ko'rinadi. GDB standart chiqishining o'zi sukut bo'yicha o'chirilgan, shuningdek, protsessor registrlari tarkibi haqidagi ma'lumotlar kabi ba'zi boshqa yorliqlar. Agar dastur biron sababga ko'ra ishlamay qolsa, disk raskadrovka panelidagi ma'lumotlar koddagi xatolik qaerda sodir bo'lganligini darhol ko'rsatadi.

1-misol

Bizning birinchi dasturimiz grafik foydalanuvchi interfeysi (GUI - Graphical User Interface) bilan bo'ladi.

#o'z ichiga oladi

#o'z ichiga oladi

int main (int argc, char *argv)

QApplication ilovasi (argc, argv);

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

QObject::connect(newbtn, SIGNAL(bosilgan()), &app, SLOT(chit()));

newbtn->o'lchamini o'zgartirish (180,40);

newbtn->show();

app.exec();

Birinchi ikkita satr Qt sinfining ta'riflari.

Bu sinflar Qt kutubxonasining amaliy dasturlash interfeysiga (API) tegishli. Kutubxonada ushbu sinflarni tavsiflovchi bir xil nomdagi fayllar mavjud.

6-qator QApplication ob'ektini yaratadi. Bu sinf barcha dastur resurslarini boshqaradi. Keyin QPushButton sinfining ob'ekti "OK" yozuvi bilan yaratiladi.

Tugma vidjetdir. 8-qator tugmaning bosilgan () signalini QApplication3 obyektining quit() uyasiga ulash uchun ishlatiladi. 9-qatorda biz vidjet hajmini o'rnatamiz va 10-qatorda biz uni ko'rsatamiz. 11-qator Qt ilovasini boshqarishni o'tkazish uchun ishlatiladi. Ushbu nuqtada dastur foydalanuvchi va tizim hodisalarini qayta ishlash uchun tsiklga kiradi.

2-misol: Foydalanuvchi kiritishini tekshirish

Foydalanuvchidan matn maydoniga ba'zi ma'lumotlarni kiritish so'ralganda, umuman kutilmagan narsalarni olish odatiy holdir. Foydalanuvchi raqamlarni so'z bilan kiritishi, noto'g'ri o'nlik ajratgichdan foydalanishi yoki hudud kodini kiritishni unutishi mumkin telefon raqami. Shunday qilib, ko'p hollarda ko'rsatilgan ma'lumotlarning to'g'riligini (qabul qilinishini)1 tekshirish kerak.

Qt QValidator sinfini o'z ichiga oladi, u kiritilgan ma'lumotlarning to'g'riligini ta'minlaydi. Ma'lumotlar sinfidan to'g'ridan-to'g'ri foydalanish mumkin emas. Ma'lumotlarni tekshirish uchun siz QIntValidator, QDoubleValidator, QRegExpValidator tayyor quyi sinflaridan foydalanishingiz yoki o'zingiz kichik sinf yozishingiz kerak bo'ladi.

validate(QString & input, int & pos) usuli tekshiriladigan satr va kursor o'rnini uzatadi. Usul quyidagi qiymatlarni qaytarishi mumkin:

QValidator::Invalid - satr yaroqsiz.

QValidator::Qabul qilinadi - string qabul qilinadi.

QValidator::Intermediate - satrni hozirgi holatda qabul qilib bo'lmaydi, lekin u haqiqiy bo'lishi mumkin.

Satrning haqiqiy son ekanligini tekshiradigan dastur yozamiz. Keling, tayyor QDoubleValidator sinfidan foydalanamiz:

MainWindow::MainWindow()

panjara = yangi QGridLayout; doubleedit = yangi QLineEdit;

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

lbresult = yangi QLabel(tr("Natija:"));

natija = yangi QLabel;

vld = yangi QDoubleValidator (-5, 2999, 5, bu);

vld->setNotation(QDoubleValidator::ScientificNotation);

doubleedit->setValidator(vld);

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

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

grid->addWidget(lbresult, 1, 0); grid->addWidget (natija, 1, 1);

hajmini o'zgartirish (160, 120); setLayout (to'r); ...

QDoubleValidator sinf konstruktori quyidagi parametrlarni qabul qilishi mumkin:

QDoubleValidator :: QDoubleValidator (ikkita pastki, ikkita yuqori, int o'nli kasrlar, QObject * ota-ona)

Haqiqiy sonlar diapazoni pastdan yuqoriga qarab. o'nli kasrlar - o'nlik ajratgichdan keyingi raqamlar soni2.

QDoubleValidator sinfining setNotation (Notation) usulidan foydalanib, ilmiy belgilarning haqiqiyligini belgilashingiz mumkin:

QDoubleValidator::StandardNotation - standart yozuv (Masalan: 1.124 yoki -2).

QDoubleValidator::ScientificNotation - ilmiy belgi, ya'ni. raqam eksponensial qismga ega bo'lishi mumkin (masalan: 2.7E-3 yoki 3.3E+2)

Kiritilgan ma'lumotlarning haqiqiyligini tekshirish uchun validate() usulidan foydalanamiz:

MainWindow::MainWindow()

QObject :: ulanish (doubleedit, SIGNAL (textChanged (const QString &)), bu, SLOT (showresult(const QString &)));

void MainWindow::showresult(const QString &text)

QString numtext = matn;

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

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

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

Dastur kodi

main.cpp

#o'z ichiga oladi

#o'z ichiga "mainwindow.h"

int main (int argv, char **args)

QApplication ilovasi (argv, args);

Asosiy oyna oynasi;

app.exec();

Mainwindiw.h#ifndef MAINWINDOW_H#MAINWINDOW_Hni aniqlang #include sinf MainWindow: ommaviy QWidget (Q_OBJECT ommaviy: MainWindow (); xususiy uyalar: void showresult (const QString &); xususiy: QGridLayout * panjara; QLineEdit * doubleedit; QLabel * lbdouble, * lbresult, * natija; QDoubleValidator * lbresult;); #endif Mainwindow.cpp#o'z ichiga oladi #include "mainwindow.h" MainWindow::MainWindow())( panjara = yangi QGridLayout; doubleedit = yangi QLineEdit; lbdouble = yangi QLabel(tr("Double:")); lbresult = yangi QLabel(tr("Natija:" ) ); natija = yangi QLabel; vld = yangi QDoubleValidator(-5, 2999, 5, bu); vld->setNotation(QDoubleValidator::ScientificNotation); doubleedit->setValidator(vld); grid->addWidget(lbdouble, 0, , 0); grid->addWidget(doubleedit, 0, 1); grid->addWidget(lbresult, 1, 0); grid->addWidget(natija, 1, 1); o‘lchamini o‘zgartirish(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 = text; if (vld->validate(numtext, pos) == 0) result->setText(tr("novalid")); if (vld->validate(numtext, pos) == 1) result-> setText (tr("Intermediate")); if (vld->validate(numtext, pos) == 2) result->setText(tr("Qabul qilinadi"));)

Misol 3. 2D grafika

QPainter sinfidan foydalanib, biz QPaintDevice sinfidan meros bo'lib qolgan har qanday ob'ektga chizishimiz mumkin (QWidget, QPrinter, QImage, QGLFramebufferObject va boshqalar). Siz geometrik shakllarni, pikselli xaritalarni, matnlarni chizishingiz mumkin. Birinchidan, QPainter bilan ishlashda foydali bo'lishi mumkin bo'lgan sinflarni ko'rib chiqaylik.

QPoint va QPointF sinflari ikki o'lchovli koordinatalar tizimidagi nuqta o'rnini belgilash uchun ishlatiladi. QPoint - butun sonlar uchun va QPointF - haqiqiy sonlar uchun. Nuqtalarga qo'shish, ayirish, ko'paytirish va bo'lish amallari qo'llaniladi:

QPoint nuqtasi (5, 5);

QPoint nuqtasi 2(10, 10);

Nuqtalarni bir-biri bilan va ularning koordinatalari nolga teng yoki yo'qligini ham solishtirish mumkin.

QPoint nuqtasi (5, 10);

QPoint nuqtasi 2(5, 10);

agar (nuqta == nuqta2)

bln = point.isNull();

QSize va QSizeF sinflari hajmni saqlash uchun ishlatiladi. QPoint va QPointF sinflariga o'xshash usullardan tashqari, bu sinflar grafik ob'ektni masshtablash imkonini beruvchi scale() usuliga ega.

QRect va QRectF sinflari to'rtburchaklar maydonlarni saqlash uchun ishlatiladi (yuqori chap burchak koordinatalari va o'lchami):

QRectF(QPointF nuqtasi, QSizeF hajmi);

QLine va QLineF sinflari to'g'ri chiziqni tasvirlaydi. QPolygon va QPolygonF sinflari to'g'ri chiziqlardan hosil bo'lgan yopiq figurani tasvirlaydi.

QColor sinfidan foydalanib, siz rang ma'lumotlarini saqlashingiz mumkin. Qt muhiti 3 ta rangli modelni qo'llab-quvvatlaydi: RGB, CMYK va HSV. Uchun rang modeli RGB QRgb tuzilishi mavjud. QColor sinf ob'ektida rang o'rnatishning bir necha yo'li mavjud:

Parametrlarni konstruktorga o'tkazish

unsigned int red = 50;

unsigned int green = 100;

unsigned int blue = 0;

unsigned int alpha = 128;

QColor mycolor (qizil, yashil, ko'k, alfa);

QRgb rgb1 = (50, 100, 0);

QColor mycolor2(rgb1);

QColor::setRgb(), QColor::setRgba(), QColor::setRgbF(), ​​QColor::setHsv(), QColor::setHsvF(), QColor::setCmyk(), QColor:: usullaridan foydalanish setCmykF( )

mycolor.setHsv(200, 100, 50);

Bir modelda rangni o'rnatish va uni boshqasida o'qish mumkin:

unsigned int h, s, v;

QColor mycolor (100, 100, 100);

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

QPainter sinfiga qaytaylik. Chizishni boshlash uchun biz QPainter sinfining ob'ektini yaratishimiz va uni bo'yash uchun ob'ektga ko'rsatgich berishimiz kerak:

QPainter pnt(bu);

pnt.drawLine(chiziq);

void Wnd::paintEvent(QPaintEvent *voqea)

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

pnt.begin(bu);

pnt.drawLine(chiziq);

QWidget::paintEvent() usuli qayta chizilishi kerak bo'lgan vidjetlarda chaqiriladi.

Ko'pgina hollarda bo'yash bir nechta bo'yoq ob'ektlarida bitta QPainter ob'ekti tomonidan amalga oshiriladi. Eski chizma sozlamalarini saqlash uchun (yangi ob'ektga o'tishda), siz QPainter :: saqlash () va QPainter :: tiklash () usullaridan foydalanishingiz mumkin. QPainter::save() o'rnatish stekiga suriladi va QPainter::restore() ochiladi.

Shaklning konturini chizish uchun QPainter ::setPen() yordamida QPen (qalam) sinf ob'ektini QPainter sinf ob'ektiga o'tkazishingiz kerak.

Tegishli usullardan foydalanib, siz qalam uslubini o'rnatishingiz mumkin (rangi, qalinligi, chiziq uchlari turi).

Yopiq konturlarni to'ldirish uchun cho'tka ishlatiladi, ya'ni. QBrush sinfining ob'ekti. QPen sinfiga o'xshab, cho'tka QPainter::setBrush() usuli yordamida o'rnatiladi. Unga QBrush obyektini yoki oldindan belgilangan BrushStyle uslublaridan birini o‘tkazishingiz mumkin:

QPainter pnt(bu);

pnt.setBrush (QBrush (Qt :: ko'k, Qt :: VerPattern)); // vertikal soyali ko'k cho'tka

QPainter klassi ob'ektlarni aylantirish, masshtablash, siljitish va egilish imkonini beradi. Ushbu operatsiyalar uchun mos usullar mavjud: rotate(), scale(), translate(), sheap().

Qt kutubxonasi anti-aliasing texnikasini qo'llab-quvvatlaydi:

pnt.setRenderHint(QPainter:: antialiasing, rost);

tl;dr - C++ da o'zaro platformali oynali ilovalar yaratish uchun Qt kutubxonasi.

Qt, loyiha sifatida, C++ dasturchilarining dasturlar uchun grafik interfeyslarni (GUI) ishlab chiqish uchun qulay asboblar to'plamiga ega bo'lish istagidan kelib chiqqan. Agar, masalan, Java-da AWT ushbu maqsadlar uchun qutidan chiqsa va Python Tk-da, C++ da shunga o'xshash narsa yo'q edi. Va nafaqat GUI-ni ishlab chiqish, balki tarmoq, multimedia va boshqa juda mashhur narsalar bilan ishlash uchun darslar. Bu ishlab chiquvchilarni juda bezovta qilishdi. Xo'sh, talab borligi sababli, taklif yetib borishiga ko'p vaqt kerak bo'lmadi. 1995 yilda kutubxonaning birinchi nashri chiqdi. O'shandan beri Qt faqat interfeysni ishlab chiqishdan tashqari tezlik bilan kengaydi.

Shuning uchun, Qt GUI yaratish uchun sinflar to'plami sifatida emas, balki barcha holatlar uchun to'liq huquqli sinflar to'plami sifatida ko'rib chiqilishi kerak. Bu dasturchi deyarli har qanday ilovani yaratish uchun kerak bo'lishi mumkin bo'lgan hamma narsa (yoki deyarli hamma narsa) to'plamidir. Kutubxonaning tuzilishi mantiqiy jihatdan tarkibiy qismlarga bo'lingan, ular juda ko'p va har biri bilan yangi versiya Qt ularda tobora ko'proq foydali sinflarga ega.

Ikkita asosiy komponent mavjud - kutubxonaning yadrosi bo'lgan QtCore va grafik interfeys komponentlarini ifodalovchi QtGui. Keyinchalik ko'rib turganimizdek, yaratilgan loyihada har doim ushbu ikkita komponent mavjud (QtCore majburiy rol o'ynaydigan konsol ilovalari bundan mustasno).

Xo'sh, ehtiyojlarga qarab, ishlab chiquvchilar o'zlarining xohlagan narsalaridan foydalanishlari mumkin. Tarmoq bilan ishlash uchun QtNetwork, o'zingizning Torrent mijozingizni yozing. Video-audio pleerni amalga oshirish uchun QtMultimedia. QtWebEngine ilovangizga toʻlaqonli brauzer mexanizmini oʻrnatish uchun. Va boshqalar.

Shuni ham ta'kidlash kerakki, e'lon qilingan o'zaro faoliyat platformalar funksiyasi haqiqatan ham mavjud. Siz bitta tizimda (Windows, MinGW) ishlab chiqilgan kodingizni olishingiz va uni boshqa tizimning kompilyatori (Linux, GCC) bilan kompilyatsiya qilishingiz va u erda hech qanday qiyinchiliksiz ishlashi mumkin bo'lgan ikkilik faylni olishingiz mumkin. Amaliyot shuni ko'rsatadiki, dastur uchinchi tomon kutubxonalari bilan og'ir yuklanganda maxsus muammolar boshlanadi.

Veb-ishlab chiquvchilar uchun yoqimli bonus dasturni nafaqat C++, balki JavaScript-ga juda o'xshash QML tilida ham ishlab chiqish imkoniyati bo'ladi. Bu mobil ilovalarni tez prototiplash va ishlab chiqishga qaratilgan Qt rivojlanishining maxsus tarmog'i.

Va, albatta, Qt-ning asosiy jihatlaridan biri bu Qt Creator ishlab chiqish muhitidir. Qt-dagi universal va juda qulay ishlab chiqish muhiti, keraksiz funksiyalar bilan ortiqcha yuklanmagan, .

Agar xatolikni sezsangiz, matn qismini tanlang va Ctrl+Enter tugmalarini bosing
UMUSHISH: