Windows.  Virus.  Bärbara datorer.  Internet.  Kontor.  Verktyg.  Förare

Inledande del: Qt handlar inte bara om element GUI. Detta ramverk är ett sammankopplat system. Qt-objektens släktskap uppnås genom nedärvning av QObject-klassen. Och kopplingarna mellan dem är genom signalslot-systemet. Denna artikel kommer att beskriva huvudklasserna och användbara funktioner i detta bibliotek. QObject Detta är basklassen för alla Qt-objekt. Det ärvs av alla klasser som använder signaler och slots. Det ger möjlighet att koppla ihop objekt med varandra. Det ger också användbar funktionalitet för detta. Introducerar detta...

Första Qt-programmet:

Det första programmet i Qt: Qt är en kraftfull verktygslåda som har många sätt att förverkliga en programmerares idéer. Låt oss börja bemästra det från det allra första programmet Så du har QtCreator-utvecklingsmiljön till hands med en kompilator ansluten till den (till exempel MinGW). I utvecklingsmiljön väljer du Annat projekt -> Projekt med underkataloger. Namn: cppstudio. Här kommer vi för enkelhetens skull att lagra alla applikationer hämtade från sajten. Låt oss skapa ett QWidget-projekt här med namnet lesson_1 och ta bort filerna mainwindows.h, mainwindows.cpp, ...

Introduktion - Qt Graphics Library

Qt är ett gratis, allmänt använt C++-grafikbibliotek. Den innehåller många komponenter för att stödja inte bara grafik, utan även nätverk, databaser, etc. Allmän information: Från början av användningen får programmeraren ett sammankopplat ramverk. Detta gör det möjligt att endast använda inbyggda klasser när du skriver större delen av programmet och nästan helt överge kopplingen till ett specifikt operativsystem. Detta tillvägagångssätt inser utvecklarens oberoende och frihet. (Det finns inget behov av att skriva om programmet för flera operativsystem. Algoritmen för Windows kan kompileras till...

Efter en dag av postliv började jag märka en läcka av karma, så jag ber i förväg om ursäkt för den möjligen oacceptabla presentationsstilen i artikeln och subjektiviteten

Hej, Habrakhabr!

På sistone kunde jag inte låta bli att uppmärksamma Qt-ämnets popularitet på Hubrik, men ändå fortsätter jag i kommentarerna att se människor som säger direkt falska och obegripliga saker. Med det här inlägget ville jag skingra några missuppfattningar om Qt och berätta varför du bör byta från din Java/Obj-C/.NET till mjuk och fluffig Qt.

Under klippet kommer det att finnas en hel del intryck, subjektiviteter och mina ödmjuka åsikter om saken den mest underbara ram för applikationsutveckling. Jag ska dock försöka lägga till intressanta saker så att min artikel får åtminstone någon tekniskt användbar betydelse. Jag hoppas att det blir en underhållande läsning och att du gillar den.

Nåväl, låt oss gå?

Veshch nr 1. C++ API

Det är ingen hemlighet att Qt har ett mycket bekvämt API, och mer specifikt innehåller qtbase-modulen ett tillräckligt antal klasser för de flesta vardagliga uppgifter ( Qt är mer än ett ramverk för grafiskt användargränssnitt lol). Jag pratade redan om STL-behållareomslag i min artikel för tre år sedan - . Klasser för att arbeta med strängar, felsökning av utdata och mycket, mycket mer, ingår också.

QString fruits = "äpple, banan, apelsin, banan"; QStringList fruitsList = fruits.split(", "); qDebug()<< fruitsList; // выведет в консоль [ "apple", "banana", "orange", "banana" ] fruitsList.removeDuplicates(); fruits = fruitsList.join(", "); qDebug() << fruits; // выведет в консоль "apple, banana, orange"
Det är värt att säga att Qt också har moduler för bekvämt arbete med XML och databaser ( med integration av det läckra-läckra MVC kutesh-systemet), OpenGL, ljud/videoarbete (Phonon), nätverksprogrammering, WebKit2. För de uppgifter som ett genomsnittligt projekt står inför räcker detta kök i 90 % av fallen, och problem uppstår sällan med modulerna.

Med tanke på min kärlek till C++ är jag väldigt, väldigt nöjd med stödet Qt ger för olika icke-triviala saker på plattformsoberoende nivå. Ett par gånger var jag tvungen att lösa särskilt obegripliga ögonblick, men så är det.

Veshch nr 2. Qt Snabb

Qt Quick är en superslick metod för att skapa ett grafiskt användargränssnitt. Genom att använda ett deklarativt språk QML (gissa var det uppfanns lol) som liknar JavaScript, kan du uppnå hög produktivitet när du skapar prototyper för gränssnittet i applikationer några komplexitet. Och det roliga är att med saker som går så här, Även en designer som kan JavaScript-syntax kan hantera gränssnittsprototyper. Dessa skulle alla vara tomma ord om jag inte hade visat dig ett exempel på funktionell kod (mer finns på Qt-projektet - där).

Importera QtQuick 2.0 Rectangle ( id: sidbredd: 320; höjd: 480 färg: "ljusgrå" Text ( id: helloText text: "Hello world!" y: 30 anchors.horizontalCenter: page.horizontalCenter font.pointSize: 24; font. fet: sant ) Rutnät ( id: colorPicker x: 4; anchors.bottom: page.bottom; anchors.bottomMargin: 4 rader: 2; kolumner: 3; mellanrum: 3 Cell ( cellColor: "red"; onClicked: helloText.color = cellColor ) Cell ( cellColor: "grön"; onClicked: helloText.color = cellColor ) Cell ( cellColor: "blue"; onClicked: helloText.color = cellColor ) Cell ( cellColor: "gul"; onClicked: helloText.color = cellColor ) Cell ( cellColor: "steelblue"; onClicked: helloText.color = cellColor ) Cell ( cellColor: "black"; onClicked: helloText.color = cellColor ) )

Implementeringen av Cell-objektet är extremt trivial och definieras på detta sätt

importera QtQuick 2.0 Objekt ( id: containeregenskap alias cellColor: rectangle.color signal clicked (color cellColor) bredd: 40; höjd: 25 Rektangel ( id: rektangel border.color: "white" anchors.fill: parent ) MouseArea ( anchors. fyll: förälder påKlickad: container.clicked(container.cellColor) ) )

Det finns inte en enda rad C++ i den här koden och den fungerar bra. Det är bra, eller hur? Det fick mig till och med att känna mig som en trollkarl - det är lättare att gå till affären för att köpa bröd än att sätta ihop en sådan här applikation. Men i komplexa applikationer räcker inte QML ensamt och vi kombinerar det med C++. Detta har diskuterats i många artiklar om Qt Software-hubben - till exempel .

Veshch nr 3. Gemenskap

Nåväl, vi har nått en trevlig stund. Om vi ​​pratar om mig så har jag jobbat med Qt relativt lite - bara 5 år. Qt håller årliga evenemang - Qt Developer Days och Qt Contributors "Summit. Jag var på var och en av dem en gång, förra året, och jag gillade det verkligen - nivån på förberedelserna är hög, och intrycken levereras. Jag var också tvungen att kommunicera med Qt "veteraner" - människor som har deltagit i toppmötet i 10 år. Jag kan föreställa mig hur coolt det är att se framväxten av ett sådant projekt framför dina egna ögon och att vara i centrum för all utveckling - bara läckert.

Dessa människor är mycket toleranta och behandlar nykomlingar väl. Det var väldigt enkelt och bekvämt för mig att knyta kontakter med så underbara människor. Qt-projektet har forum där vem som helst kan få svar på sin fråga. Det är roligt, men det suger verkligen mycket livlig och där verkligen svara på frågor som dyker upp i processen att lära sig Qt.

Veshch nr 4. Granskning av öppen källkod och kod

Soretz Cut är öppet utvecklat främst av Digia (komm. support +), KDAB, ICS och entusiastiska utvecklare. Det hela är värd på Gitorious - Tadamts. För att bidra till utvecklingen av projektet behöver du gå igenom sträng kodverifiering - automatiserad (efterlevnad av kodstilen som jag redan skrivit om tidigare -) och mänsklig - din kod kommer att tittas på av skäggiga män som inte litar på dig och kommer att leta efter bakdörrar i din kod. Allt detta är en ganska komplicerad process (problem med Git / revisioner på granskningsnämnden) och jag kommer förmodligen att skriva en artikel om det en av dessa dagar.

Förresten, jag har ett par commits i qtbase-trädet, så du kan fråga mig i PM så ska jag försöka svara på dina frågor.

Veshch nr 5. Projektutvecklingsdynamik

Qt har varit under utveckling i många år, sedan slutet av 90-talet. Under den här tiden har företag som Trolltech och Nokia redan lekt med sin kommersiella version och nu gör Digia det. Men en sak är säker, projektet lever och frodas. I några år till skrev alla design i widgets (C++-klasser, alla baserade på QWidget), men idag kan även ett litet barn göra det. Jag tycker inte att det är värt att säga att parallellt med det utvecklas det mest kraftfulla aktivt - Qt Creator, som idag inte bara gläder Qt-programmerare!

^ coola Qt Creator, där du kan skapa mirakel och du kommer inte att få något för det.

Tyvärr har jag inga strikta siffror, men de säger att koden optimeras varje dag, och kodbasen utökas noggrant - nya funktioner läggs till och gamla buggar fixas (jag har redan sett detta många gånger). Allt detta är mycket lämpligt och kan inte annat än glädjas.

Dessutom utvecklas nu plattformar aktivt iOS, Android, Windows Phone, du kan nu kompilera program för dem!

Bottom line

Jag tror att du förstår att Qt är riktigt cool och efter att ha läst artikeln blev du lika kär i den som jag.
Tack för din uppmärksamhet!

Efter en dag av postliv började jag märka en läcka av karma, så jag ber i förväg om ursäkt för den möjligen oacceptabla presentationsstilen i artikeln och subjektiviteten

Hej, Habrakhabr!

På sistone kunde jag inte låta bli att uppmärksamma Qt-ämnets popularitet på Hubrik, men ändå fortsätter jag i kommentarerna att se människor som säger direkt falska och obegripliga saker. Med det här inlägget ville jag skingra några missuppfattningar om Qt och berätta varför du bör byta från din Java/Obj-C/.NET till mjuk och fluffig Qt.

Under klippet kommer det att finnas en hel del intryck, subjektiviteter och mina ödmjuka åsikter om saken den mest underbara ram för applikationsutveckling. Jag ska dock försöka lägga till intressanta saker så att min artikel får åtminstone någon tekniskt användbar betydelse. Jag hoppas att det blir en underhållande läsning och att du gillar den.

Nåväl, låt oss gå?

Veshch nr 1. C++ API

Det är ingen hemlighet att Qt har ett mycket bekvämt API, och mer specifikt innehåller qtbase-modulen ett tillräckligt antal klasser för de flesta vardagliga uppgifter ( Qt är mer än ett ramverk för grafiskt användargränssnitt lol). Jag pratade redan om omslag för STL-behållare i min artikel för tre år sedan - tytsk. Klasser för att arbeta med strängar, felsökning av utdata och mycket, mycket mer, ingår också.

QString fruits = "äpple, banan, apelsin, banan"; QStringList fruitsList = fruits.split(", "); qDebug()<< fruitsList; // выведет в консоль [ "apple", "banana", "orange", "banana" ] fruitsList.removeDuplicates(); fruits = fruitsList.join(", "); qDebug() << fruits; // выведет в консоль "apple, banana, orange"
Det är värt att säga att Qt också har moduler för bekvämt arbete med XML och databaser ( med integration av det läckra-läckra MVC kutesh-systemet), OpenGL, ljud/videoarbete (Phonon), nätverksprogrammering, WebKit2. För de uppgifter som ett genomsnittligt projekt står inför räcker detta kök i 90 % av fallen, och problem uppstår sällan med modulerna.

Med tanke på min kärlek till C++ är jag väldigt, väldigt nöjd med stödet Qt ger för olika icke-triviala saker på plattformsoberoende nivå. Ett par gånger var jag tvungen att lösa särskilt obegripliga ögonblick, men så är det.

Veshch nr 2. Qt Snabb

Qt Quick är en superslick metod för att skapa ett grafiskt användargränssnitt. Genom att använda ett deklarativt språk QML (gissa var det uppfanns lol) som liknar JavaScript, kan du uppnå hög produktivitet när du skapar prototyper för gränssnittet i applikationer några komplexitet. Och det roliga är att med saker som går så här, Även en designer som kan JavaScript-syntax kan hantera gränssnittsprototyper. Dessa skulle alla vara tomma ord om jag inte hade visat dig ett exempel på funktionell kod (mer finns på Qt-projektet - där).

Importera QtQuick 2.0 Rectangle ( id: sidbredd: 320; höjd: 480 färg: "ljusgrå" Text ( id: helloText text: "Hello world!" y: 30 anchors.horizontalCenter: page.horizontalCenter font.pointSize: 24; font. fet: sant ) Rutnät ( id: colorPicker x: 4; anchors.bottom: page.bottom; anchors.bottomMargin: 4 rader: 2; kolumner: 3; mellanrum: 3 Cell ( cellColor: "red"; onClicked: helloText.color = cellColor ) Cell ( cellColor: "grön"; onClicked: helloText.color = cellColor ) Cell ( cellColor: "blue"; onClicked: helloText.color = cellColor ) Cell ( cellColor: "gul"; onClicked: helloText.color = cellColor ) Cell ( cellColor: "steelblue"; onClicked: helloText.color = cellColor ) Cell ( cellColor: "black"; onClicked: helloText.color = cellColor ) )

Implementeringen av Cell-objektet är extremt trivial och definieras på detta sätt

importera QtQuick 2.0 Objekt ( id: containeregenskap alias cellColor: rectangle.color signal clicked (color cellColor) bredd: 40; höjd: 25 Rektangel ( id: rektangel border.color: "white" anchors.fill: parent ) MouseArea ( anchors. fyll: förälder påKlickad: container.clicked(container.cellColor) ) )

Det finns inte en enda rad C++ i den här koden och den fungerar bra. Det är bra, eller hur? Det fick mig till och med att känna mig som en trollkarl - det är lättare att gå till affären för att köpa bröd än att sätta ihop en sådan här applikation. Men i komplexa applikationer räcker inte bara QML och vi kombinerar det med C++. Detta diskuterades i många artiklar i Qt Software-hubben - till exempel där.

Veshch nr 3. Gemenskap

Nåväl, vi har nått en trevlig stund. Om vi ​​pratar om mig så har jag jobbat med Qt relativt lite - bara 5 år. Qt håller årliga evenemang - Qt Developer Days och Qt Contributors "Summit. Jag var på var och en av dem en gång, förra året, och jag gillade det verkligen - nivån på förberedelserna är hög, och intrycken levereras. Jag var också tvungen att kommunicera med Qt "veteraner" - människor som har deltagit i toppmötet i 10 år. Jag kan föreställa mig hur coolt det är att se framväxten av ett sådant projekt framför dina egna ögon och att vara i centrum för all utveckling - bara läckert.

Dessa människor är mycket toleranta och behandlar nykomlingar väl. Det var väldigt enkelt och bekvämt för mig att knyta kontakter med så underbara människor. Qt-projektet har forum där vem som helst kan få svar på sin fråga. Det är roligt, men det suger verkligen mycket livlig och där verkligen svara på frågor som dyker upp i processen att lära sig Qt.

Veshch nr 4. Granskning av öppen källkod och kod

Soretz Cut är öppet utvecklat främst av Digia (komm. support +), KDAB, ICS och entusiastiska utvecklare. Det hela är värd på Gitorious - Tadamts. För att bidra till utvecklingen av projektet behöver du gå igenom sträng kodkontroll - automatiserad (efterlevnad av kodstilen som jag redan skrivit om tidigare - ptsss) och mänsklig - din kod kommer att tittas på av skäggiga män som inte litar på dig och kommer att leta efter bakdörrar i din kod. Allt detta är en ganska komplicerad process (problem med Git / revisioner på granskningsnämnden) och jag kommer förmodligen att skriva en artikel om det en av dessa dagar.

Förresten, jag har ett par commits i qtbase-trädet, så du kan fråga mig i PM så ska jag försöka svara på dina frågor.

Veshch nr 5. Projektutvecklingsdynamik

Qt har varit under utveckling i många år, sedan slutet av 90-talet. Under den här tiden har företag som Trolltech och Nokia redan lekt med sin kommersiella version och nu gör Digia det. Men en sak är säker, projektet lever och frodas. I några år till skrev alla design i widgets (C++-klasser, alla baserade på QWidget), men idag kan även ett litet barn göra det. Jag tycker inte att det är värt att säga att parallellt med det utvecklas det mest kraftfulla aktivt - Qt Creator, som idag inte bara gläder Qt-programmerare!

^ coola Qt Creator, där du kan skapa mirakel och du kommer inte att få något för det.

Tyvärr har jag inga strikta siffror, men de säger att koden optimeras varje dag, och kodbasen utökas noggrant - nya funktioner läggs till och gamla buggar fixas (jag har redan sett detta många gånger). Allt detta är mycket lämpligt och kan inte annat än glädjas.

Dessutom utvecklas nu plattformar aktivt iOS, Android, Windows Phone, du kan nu kompilera program för dem!

Bottom line

Jag tror att du förstår att Qt är riktigt cool och efter att ha läst artikeln blev du lika kär i den som jag.
Tack för din uppmärksamhet!

Föreläsning och laborationer

Efter pris: Operativsystem

På ämnet: Qt programmeringsmiljö

Avslutad:

Elever i grupp A-06-09

Smirnov Andrey

Marugin Mikhail

1.Introduktion

2.Historia

3. Utveckling av miljön

4.Tillämpningsomfång

5. Allmän information

6. Komponenter

7.Utvecklingsmiljö

8. Arbeta med Qt Creator

9.Exempel

10. Laborationsuppgift

Introduktion

Det finns också "bindningar" till många andra programmeringsspråk: Python - PyQt, Ruby - QtRuby, Java - Qt Jambi, PHP - PHP-Qt och andra.

Låter dig köra programvara som skrivits med dess hjälp på de flesta moderna operativsystem genom att helt enkelt kompilera programmet för varje OS utan att ändra källkoden. Inkluderar alla grundläggande klasser som kan krävas vid utveckling av applikationsprogramvara, allt från grafiska gränssnittselement till klasser för att arbeta med nätverk, databaser och XML. Qt är helt objektorienterat, lätt att utöka och stöder komponentbaserade programmeringstekniker.

Sedan version 4.5 har Qt distribuerats under olika licenser. Det betyder att om du ska skapa kommersiella applikationer måste du köpa en kommersiell Qt-licens; Om du skapar ett program med öppen källkod kan du använda versionen med GPL-licensen.

Berättelse

Qt-utvecklingsverktyg blev först kända för allmänheten i maj 1995. Qt utvecklades ursprungligen av Haarvard Nord och Eric Chamb-Ing.

1991 började Haarvard skriva de klasser som effektivt bildade Qt, med designbeslut som fattades tillsammans med Eric.

Året därpå kom Irick på idén om "signaler och slots" - ett enkelt men kraftfullt GUI-programmeringsparadigm som nu har antagits av flera andra verktyg.

År 1993 hade Haarward och Eirik utvecklat den första Qt-grafikmotorn och kunde skapa sina egna widgets.

Ointressanta anteckningar: Bokstaven "Q" valdes som klassprefix eftersom den hade ett snyggt utseende i Emacs-typsnittet som Haarward använde. Bokstaven "t" lades till för att stå för "verktygslåda".

Utveckling

I april 1995 skrev det norska företaget Metis på ett kontrakt med dem om att utveckla mjukvara baserad på Qt.

26 maj 1995 - första offentliga versionen av Qt. Qt kunde användas i både Windows- och Unix-utveckling, och mjukvarugränssnittet var detsamma på båda plattformarna.



Från 1996 till 2001 - utveckling till version Qt3. Qt fungerade nu på Windows, Mac Os X och Unix-system.

Sommaren 2005 - Qt 4.0 släpptes. Med nästan 500 klasser och över 9 000 funktioner är Qt 4 större och rikare än någon tidigare version; det har delats upp i flera bibliotek så att utvecklare bara kan använda de delar av Qt de behöver.

Idag är versionen Qt4.8

Qt 4 är en stor förbättring jämfört med tidigare versioner; den innehåller en helt ny uppsättning kraftfulla och lättanvända containerklasser, förbättrad modell-/vyarkitektfunktionalitet, ett snabbt och flexibelt 2D-grafikramverk och kraftfulla klasser för att visa och redigera Unicode-text, för att inte tala om tusentals små förbättringar i hela spektrumet av klasser Qt.

Qt 4 är den första versionen av Qt tillgänglig på alla plattformar som stöds för både kommersiell och öppen källkodsutveckling.

Tillämpningsområde

Möjlighet att skapa skrivbordsapplikationer för Windows, Linux, Mac OS X (både konsol och med ett grafiskt gränssnitt i fönster). Under de senaste åren har det funnits en trend mot en ökning av antalet tillverkade mobila enheter. Som ett resultat portades Qt till mobila plattformar: Symbian, Maemo, MeeGo. Vi känner också till den framgångsrika erfarenheten av att porta Qt Lighthouse till Android-plattformen.

Allmän information

Låter dig köra programvara som skrivits med dess hjälp på de flesta moderna operativsystem genom att helt enkelt kompilera programmet för varje OS utan att ändra källkoden.

Inkluderar alla grundläggande klasser som kan krävas vid utveckling av applikationsprogramvara, allt från grafiska gränssnittselement till klasser för att arbeta med nätverk, databaser och XML.

Qt är helt objektorienterat, lätt att utöka och stöder komponentbaserade programmeringstekniker.

Det finns versioner av biblioteket för Microsoft Windows, UNIX-klasssystem med X11-grafikundersystemet, iOS, Android, Mac OS X, Microsoft Windows CE, QNX, inbyggda Linux-system och S60-plattformen. Möjligheten att introducera Qt-stöd till Windows Phone övervägs för närvarande. Portering till Haiku pågår också.

En utmärkande egenskap hos Qt från andra bibliotek är användningen Meta Object Compiler (MOC)- ett preliminärt bearbetningssystem för källkod (i allmänhet är Qt inte ett bibliotek för ren C++, utan för dess speciella språk, från vilket MOC "översätts" för efterföljande kompilering av en standard C++-kompilator). MOC låter dig öka kraften i biblioteken många gånger om genom att introducera koncept som slots och signaler. Dessutom gör detta att du kan göra koden mer kortfattad. MOC-verktyget söker i C++-huvudfiler efter klassdefinitioner som innehåller makrot Q_OBJECT och skapar ytterligare en C++-källfil som innehåller metaobjektkoden.

Qt låter dig skapa dina egna plugins och placera dem direkt i den visuella redigeringspanelen. Det finns också möjlighet att utöka den vanliga funktionaliteten för widgets relaterade till deras placering på skärmen, displayen och rita om när fönsterstorleken ändras.

Qt kommer med en visuell GUI-utvecklingsmiljö som heter Qt Designer, som låter dig skapa dialoger och formulär i WYSIWYG-läge.

Qt-distributionen inkluderar "Qt Linguist" - ett grafiskt verktyg som låter dig förenkla lokaliseringen och översättningen av programmet till många språk; och "Qt Assistant" - ett Qt-hjälpsystem som förenklar arbetet med biblioteksdokumentation, och som även låter dig skapa plattformsoberoende hjälp för programvara utvecklad baserad på Qt. Från och med version 4.5.0 innehåller Qt-paketet utvecklingsmiljön Qt Creator, som inkluderar en kodredigerare, hjälp, grafiska verktyg för Qt Designer och möjligheten att felsöka applikationer. "Qt Creator" kan använda GCC eller Microsoft VC++ som kompilator och GDB som debugger. För Windows-versioner är biblioteket utrustat med en kompilator, MinGW-huvud och objektfiler.

Komponenter(låt oss markera ett par )

Biblioteket är uppdelat i flera moduler, för den fjärde versionen av biblioteket är det:

QtCore- bibliotekets kärnklasser som används av andra moduler;

QtGui- komponenter för grafiskt gränssnitt;

QtNetwork- en uppsättning klasser för nätverksprogrammering. Stöd för olika högnivåprotokoll kan variera från version till version. Version 4.2.x innehåller klasser för att arbeta med FTP- och HTTP-protokollen. Klasser som QTcpServer, QTcpSocket för TCP och QUdpSocket för UDP är designade för att fungera med TCP/IP-protokoll;

QtOpenGL- en uppsättning klasser för att arbeta med OpenGL;

QtSql- en uppsättning klasser för att arbeta med databaser med det strukturerade frågespråket SQL. Huvudklasserna för denna modul i version 4.2.x: QSqlDatabas- en klass för att tillhandahålla en anslutning till en databas, den kräver ett objekt som ärvt från QSqlDriver-klassen - en abstrakt klass som är implementerad för en specifik databas och kan kräva en databas-SDK för kompilering. Till exempel, för att bygga en drivrutin för en FireBird/InterBase-databas, krävs .h-filer och statiska länkbibliotek som ingår i leveranspaketet för denna databas;

QtScript- klasser för att arbeta med Qt-skript;

QtSvg- klasser för att visa och arbeta med Scalable Vector Graphics (SVG) data;

QtXml- modul för att arbeta med XML, stöder SAX och DOM arbetsmodeller;

QtDesigner- klasser för att skapa QtDesigner-tillägg för dina egna widgets;

QtUITools- klasser för bearbetning av Qt Designer-formulär i applikationen;

QtAssistant- hjälpsystem;

Qt3Support- en modul med klasser som är nödvändiga för kompatibilitet med Qt-biblioteksversion 3.x.x;

QtTest- modul för att arbeta med UNIT-tester;

QtWebKit- WebKit-modul integrerad i Qt och tillgänglig via dess klasser;

QtXmlPatterns- modul för att stödja XQuery 1.0 och XPath 2.0;

Phonon- en modul för att stödja uppspelning och inspelning av video och ljud, både lokalt och från enheter och över nätverket;

QtCLucene- en modul för att stödja fulltextsökning, som används i den nya versionen av Assistant i Qt 4.4;

ActiveQt- en modul för att arbeta med ActiveX- och COM-teknologier för Qt-utvecklare under Windows.

QtDeklarativ- en modul som ger ett deklarativt ramverk för att skapa dynamiska, anpassningsbara användargränssnitt.

Biblioteket använder sitt eget projektformat, kallat en .pro-fil, som innehåller information om vilka filer som kommer att kompileras, vilka sökvägar man ska söka efter header-filer och mycket annan information.

Därefter, med hjälp av verktyget qmake, används de för att skapa en make-fil för kompilatorns make-verktyg. Det är också möjligt att arbeta med integratörer med Microsoft Visual Studio 2003/2005/2008/2010. Ganska nyligen blev integration med Eclipse tillgänglig för version 4.x.x av biblioteket.

Java-utvecklare kan använda Qt med Qt Jambi-ramverket från samma tillverkare (Qt Software slutade officiellt utveckla detta ramverk 2009).

«+»

En av de betydande fördelarna med Qt-projektet är tillgången till högkvalitativ dokumentation. Dokumentationsartiklarna är försedda med ett stort antal exempel. Källkoden för själva biblioteket är välformaterad, mycket kommenterad och lätt att läsa, vilket också gör Qt lätt att lära sig.

Utvecklingsmiljö

Qt Creator är en plattformsfri IDE för utveckling i C, C++ och QML. Utvecklad av Trolltech (Nokia) för att arbeta med Qt-ramverket. Inkluderar ett grafiskt felsökningsgränssnitt och visuella gränssnittsutvecklingsverktyg som använder både QtWidgets och QML. Kompilatorer som stöds: Gcc, Clang, MinGW, MSVC, Linux ICC, GCCE, RVCT, WINSCW.

Huvudmålet med Qt Creator är att förenkla applikationsutveckling med Qt-ramverket på olika plattformar. Därför, bland funktionerna som är inneboende i alla utvecklingsmiljöer, finns det också specifika sådana, som att felsöka applikationer i QML och visa data från Qt-behållare i debuggern, en inbyggd gränssnittsdesigner både i QML och QtWidgets.

Jobbar i Qt Creator

Qt Creator har en bekväm "guide" för att skapa nya projekt, formulär, klassfiler och så vidare. Även om du istället för att skapa en ui-fil för huvudfönstret kan infoga en enkel kod i projektet utan att röra vid visuell programmering. Efter att ha skapat eller öppnat ett projekt visas själva utvecklingsmiljön framför oss. Till en början ser hon ovanlig ut. Till exempel finns det inga kända flikar (flikar med ryggar). Eller snarare, de finns där för allt utom editorfiler. Filerna i sig är tillgängliga från två listor: projektfiler (som standard i den vänstra panelen) och redan öppna filer (i den översta raden i redigeringspanelen). Varför valde du att överge flikar? Jag tror att det är för att spara skärmutrymme.

En annan ovanlig punkt är ganska relativ, eftersom gränssnittet "ingen dialog" länge har antagits av vissa andra program (till exempel TEA-redigeraren). I Qt Creator visas inmatningsfält för att söka och ersätta text, och när du skriver text markeras de hittade matchningarna direkt i editorn. För att söka vidare finns F3, och för att ersätta finns ett separat inmatningsfält. Tillval finns också i närheten. Tack vare allt detta utförs sådana operationer snabbt och bekvämt. Detsamma gäller informations- och felsökningspaneler: ingen modalitet, onödiga fönster som överlappar den huvudsakliga och andra nöjen med det tidigare tillvägagångssättet för gränssnittsarkitektur. Allt i ett huvudfönster!

Qt Creator tog även hand om kodredigeraren. Få människor kan bli överraskade av syntaxmarkering nuförtiden, så låt oss gå vidare till andra användbara funktioner. Till exempel finns det en "full kodtolkare" - detta är redaktörens förmåga att kontrollera koden för korrekthet ur programmeringsspråkets synvinkel. När du skriver kod kan du se var du gjorde ett syntaxfel innan det kompilerades. I de flesta fall fungerar det, även om det finns undantag. Automatiskt slutförande fungerar utmärkt: skriv namnet på en klassinstans, skriv en punkt eller "->" - så får du en rullgardinslista med klassmedlemmar. Det finns en vikning av kodblock - den så kallade "vikningen". Jag tror dock att koden är tydligare utan den, så jag använder aldrig det här alternativet.

Att navigera genom koden är välgjord - och utan externa ctaggar. Placera helt enkelt markören på namnet på funktionen eller variabeln och tryck på F2, varefter editorn flyttar till deklarationsplatsen. Skift-F2 - växlar mellan deklaration och kod, och F4 - växlar helt enkelt header och cpp-fil. Om du flyttar muspekaren över namnet på en funktion som anropas i koden, kommer en ledtråd om dess parametrar att visas.

Hjälpsystem fungerar enligt följande. Låt oss säga att du har en variabel som QMenu någonstans i din kod. Om du placerar markören på den och trycker på F1, visas en hjälppanel med en beskrivning av QMenu-klassen. Det finns också en hjälpflik i huvudfönstret, där all Qt-dokumentation finns tillgänglig.

Så du kommer att spendera det mesta av din tid på redigeringsfliken. Det är inte helt klart varför det i Qt Creator-inställningarna finns så många som fem sektioner för olika redaktörer - som standard för skript, för C++, för projekt och Perforce (ett kommersiellt versionskontrollsystem). C++ editorinställningar är inställningarna för kodredigeraren för ditt Qt-program. Jag noterar att i de senaste "ögonblicksbilderna" av Qt Creator är teckensnittsinställningarna fortfarande organiserade i en enda sektion, vilket är att vänta.

Det är användbart att ställa in bakgrundsbelysningen och teckensnitten, eftersom standardinställningarna inte är särskilt bekväma att arbeta med. För det första är teckensnittsstorleken för liten, och för det andra tolkas kodblock inneslutna i #ifdef / #endif av parsern som "inaktiverad kod" (ett uttryck från Qt Creator-inställningarna) och är färgade grå- det är inte särskilt bekvämt att analysera vad som skrivs. Om du inte gillar "vikning", inaktivera Visa vikmarkörer i redigeringsinställningarna.

Du kan ställa in bokmärken och brytpunkter i redigerarens fält. Själva redigeringspanelen kan delas in i ett oändligt antal kapslade paneler - liknande Konqueror. Således kan du redigera antingen flera filer på skärmen samtidigt, eller samma dokument, men på olika platser. För att göra detta måste du först dela upp redigeringspanelen (till exempel genom Fönster - Dela topp/botten) och sedan välja menyalternativet Fönster - Duplicera dokument. Detta tillvägagångssätt är ibland mer användbart än tröttsam navigering genom bokmärken.

Arkitekturen för Qt Creator är baserad på plugins. Redaktören är en plugin, bokmärkesmotorn är en plugin, panelen med projektfiler är också en plugin och så vidare. Lista installerade plugins finns i menyn Hjälp - Om plugins. Det kommer troligtvis att gå att installera ytterligare plugins i framtiden, men än så länge har jag inte upptäckt någon mekanism för detta och inte heller hittat några ytterligare plugins själva. Men i själva sammansättningarna dyker nya plugins upp i en aldrig tidigare skådad hastighet. På bara en månad dök supportmoduler för Subversion och Git upp. Qt Creator i allmänhet är nu i sig övergående. Qt Creator menyalternativ byts om från version till version och flyttas till andra undermenyer. För att inte tala om att ytterligare funktioner ständigt föds.

Låt oss ägna lite uppmärksamhet åt inställningsfönstret, som det lyckligtvis finns många av. Du kan anpassa kortkommandon och dessutom importera/exportera dem med hjälp av externa filer. Detta är praktiskt för att överföra dina favoritgenvägar från maskin till maskin. Qt Creator innehåller två sådana förinstallerade filer som standard: för MS Visual C++ och Xcode. Allt relaterat till automatisk komplettering, indrag, syntaxmarkering, etc. finns i editorns inställningar - Text Editor.

Ett annat intressant verktyg i Qt Creator är Locator (i äldre versioner - Snabbsök). För att flytta fokus till det, tryck bara på Ctrl-K. Ser ut som en vanlig sökfält, men tjänar till snabb sökning vad du vill. Mer specifikt söker den efter filer, i filer, klasser, funktioner. Stöder modifieringstecken för att förfina sökuppgiften. Du vill till exempel titta i Qt-dokumentationen efter en beskrivning av den globala qApp-pekaren. Vad ska man göra? Tidigare var man tvungen att öppna dokumentationen via en webbläsare och söka där. Men i Qt Creator, när Locator alltid finns till hands, räcker det med att skriva i sökfältet? qapp och tryck på Enter. Gå till rad nummer 100? Slå numret och skriv igen.

Och slutligen, låt oss återgå till interaktion med GDB felsökare. Qt Creator, genom sitt grafiska gränssnitt, låter dig felsöka inte bara det aktuella projektet, utan även alla externt program- naturligtvis om den är sammanställd med felsökningsinformation. Vid felsökning visas olika typer av data i separata flikar: trådar, variabler, brytpunkter och disassembler. QStringList-instansen ser särskilt tydlig ut i debuggern - alla dess element är synliga. Standardutgång GDB själv är avstängd som standard, liksom vissa andra flikar som information om innehållet i processorregister. Om programmet kraschar av någon anledning visar data i felsökningspanelen omedelbart var felet inträffade i koden.

Exempel 1

Vårt första program kommer att vara med ett grafiskt användargränssnitt (GUI - Graphical User Interface).

#omfatta

#omfatta

int main(int argc, char *argv)

QApplication app(argc, argv);

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

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

newbtn->ändra storlek(180,40);

newbtn->show();

returnera app.exec();

De två första raderna är Qt-klassdefinitioner.

Dessa klasser tillhör Qt-bibliotekets Application Programming Interface (API). Biblioteket innehåller filer med samma namn som beskriver dessa klasser.

Rad 6 skapar ett QApplication-objekt. Den här klassen hanterar alla programresurser. Sedan skapas ett objekt av klassen QPushButton med inskriptionen "OK".

Knappen är en widget. Rad 8 används för att binda knappens clicked()-signal till quit()-platsen för QApplication3-objektet. På rad 9 ställer vi in ​​storleken på widgeten och på rad 10 visar vi den. Linje 11 används för att överföra kontrollen över Qt-applikationen. Vid denna tidpunkt går programmet in i en loop för bearbetning av användar- och systemhändelser.

Exempel 2: Validering av användarinmatning

När användaren uppmanas att ange vissa uppgifter i ett textfält är det ganska vanligt att man får något helt oväntat. Användaren kan ange siffror i ord, använda fel decimaltecken eller glömma att ange riktnumret i telefonnummer. Därför är det i de flesta fall nödvändigt att kontrollera riktigheten (tillåtligheten)1 av den specificerade informationen.

Qt innehåller QValidator-klassen, som säkerställer att inmatade data är korrekta. Dataklassen kan inte användas direkt. För att kontrollera data måste du antingen använda färdiga underklasser QIntValidator, QDoubleValidator, QRegExpValidator, eller skriva en underklass själv.

Validera (QString & input, int & pos) metoden skickas strängen som ska kontrolleras och markörens position. Metoden kan returnera följande värden:

QValidator::Invalid - strängen är ogiltig.

QValidator::Acceptable - strängen är acceptabel.

QValidator::Intermediate - strängen kan inte accepteras i sitt nuvarande tillstånd, men den kan bli giltig.

Låt oss skriva ett program som kontrollerar om en sträng är ett reellt tal. Låt oss använda den färdiga QDoubleValidator-klassen:

MainWindow::MainWindow()

grid = ny QGridLayout; doubleedit = ny QLineEdit;

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

lbresult = new QLabel(tr("Resultat:"));

resultat = ny QLabel;

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

vld->setNotation(QDoubleValidator::ScientificNotation);

doubleedit->setValidator(vld);

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

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

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

ändra storlek(160, 120); setLayout(grid); ...

Klasskonstruktorn QDoubleValidator kan acceptera följande parametrar:

QDoubleValidator::QDoubleValidator (dubbel botten, dubbel topp, int decimaler, QObject * förälder)

Utbudet av reella tal är från botten till toppen inklusive. decimaler - antal siffror efter decimalavgränsaren2.

Med hjälp av setNotation(Notation)-metoden för QDoubleValidator-klassen kan du ställa in giltigheten för vetenskaplig notation:

QDoubleValidator::StandardNotation - standardnotation (till exempel: 1.124 eller -2).

QDoubleValidator::ScientificNotation - vetenskaplig notation, dvs. talet kan ha en exponentiell del (till exempel: 2.7E-3 eller 3.3E+2)

För att kontrollera giltigheten av de inmatade uppgifterna kommer vi att använda metoden validate():

MainWindow::MainWindow()

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

void MainWindow::showresult(const QString &text)

QString numtext = text;

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

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

if (vld->validate(numtext, pos) == 2) resultat->setText(tr("Acceptable"));

Programkod

main.cpp

#omfatta

#inkludera "mainwindow.h"

int main(int argv, char **args)

QApplication app(argv, args);

MainWindow fönster;

returnera app.exec();

Mainwindiw.h#ifndef MAINWINDOW_H#define MAINWINDOW_H #inkludera class MainWindow: public QWidget( Q_OBJECT public: MainWindow(); privata platser: void showresult(const QString &); privat: QGridLayout *grid; QLineEdit *doubleedit; QLabel *lbdouble, *lbresult, *result; QDoubleValidator *vld; #endif Mainwindow.cpp#omfatta #include "mainwindow.h" MainWindow::MainWindow())( grid = new QGridLayout; doubleedit = new QLineEdit; lbdouble = new QLabel(tr("Dubbel:")); lbresult = new QLabel(tr("Resultat:" ) ); resultat = ny QLabel; doubleedit, 0, 1); )), detta, 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("ogiltig")); if (vld->validate(numtext, pos) == 1) resultat->setText (tr("Intermediate"); (numtext, pos) == 2) resultat->setText(tr("Acceptable"));)

Exempel 3. 2D-grafik

Med QPainter-klassen kan vi rita på vilket objekt som helst som ärvts från QPaintDevice-klassen (QWidget, QPrinter, QImage, QGLFramebufferObject, etc.). Du kan rita geometriska former, pixelkartor, text. Låt oss först titta på de klasser som kan vara användbara när du arbetar med QPainter.

Klasserna QPoint och QPointF används för att specificera positionen för en punkt i ett tvådimensionellt koordinatsystem. QPoint - för heltal och QPointF - för reella tal. Operationerna addition, subtraktion, multiplikation och division är tillämpliga på poäng:

QPoint point(5, 5);

QPoint punkt 2(10, 10);

Punkter kan också jämföras med varandra och om deras koordinater är lika med noll.

QPoint point(5, 10);

QPoint punkt 2(5, 10);

if (punkt == punkt 2)

bln = point.isNull();

Klasserna QSize och QSizeF används för att lagra storlek. Förutom metoder som liknar de i klasserna QPoint och QPointF, har dessa klasser metoden scale(), som låter dig skala ett grafiskt objekt.

Klasserna QRect och QRectF används för att lagra rektangulära områden (koordinater och storlek i övre vänstra hörnet):

QRectF(QPointF-punkt, QSizeF-storlek);

Klasserna QLine och QLineF beskriver en rak linje. Klasserna QPolygon och QPolygonF beskriver en sluten figur som bildas av raka linjer.

Med QColor-klassen kan du lagra färginformation. Qt-miljön stöder 3 färgmodeller: RGB, CMYK och HSV. För färgmodell RGB det finns en QRgb-struktur. Det finns flera sätt att ställa in en färg i ett QColor-klassobjekt:

Skickar parametrar till konstruktören

osignerad int röd = 50;

osignerad int grön = 100;

osignerad int blå = 0;

osignerad int alfa = 128;

QColor mycolor(röd, grön, blå, alfa);

QRgb rgb1 = (50, 100, 0);

QColor mycolor2(rgb1);

Använda metoderna QColor::setRgb(), QColor::setRgba(), QColor::setRgbF(), ​​​​QColor::setHsv(), QColor::setHsvF(), QColor::setCmyk(), QColor:: setCmykF( )

mycolor.setHsv(200, 100, 50);

Det är möjligt att ställa in färgen i en modell och läsa den i en annan:

osignerad int h, s, v;

QColor mycolor(100, 100, 100);

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

Låt oss återgå till QPainter-klassen. För att börja rita behöver vi bara skapa ett objekt av klassen QPainter och skicka det en pekare till objektet som ska målas:

QPainter pnt(detta);

pnt.drawLine(line);

void Wnd::paintEvent(QPaintEvent *event)

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

pnt.begin(detta);

pnt.drawLine(line);

Metoden QWidget::paintEvent() anropas på widgetar som måste ritas om.

I de flesta fall görs målning av ett enda QPainter-objekt på flera målningsobjekt. För att spara gamla ritinställningar (när du flyttar till ett nytt objekt) kan du använda metoderna QPainter::save() och QPainter::restore(). QPainter::save() trycker på installationsstacken och QPainter::restore() dyker upp.

För att rita konturerna av en form måste du skicka ett QPen-klassobjekt (penna) till ett QPainter-klassobjekt med hjälp av QPainter::setPen().

Med hjälp av lämpliga metoder kan du ställa in pennstilen (färg, tjocklek, typ av linjeslut).

För att fylla slutna konturer används en borste, d.v.s. objekt i QBrush-klassen. I analogi med QPen-klassen ställs penseln in med QPainter::setBrush()-metoden. Du kan skicka antingen ett QBrush-objekt eller en av de fördefinierade BrushStyle-stilarna till det:

QPainter pnt(detta);

pnt.setBrush(QBrush(Qt::blue, Qt::VerPattern)); // blå borste med vertikal skuggning

QPainter-klassen låter dig rotera, skala, flytta objekt och fasa. Det finns motsvarande metoder för dessa operationer: rotate(), scale(), translate(), sheap().

Qt-biblioteket stöder anti-aliasing-tekniker:

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

tl;dr - Qt-bibliotek för att skapa plattformsoberoende fönsterapplikationer i C++.

Qt, som ett projekt, föddes ur önskan från C++-utvecklare att ha en praktisk verktygslåda för att utveckla grafiska gränssnitt (GUI) för program. Om, till exempel, i Java kommer AWT ur lådan för dessa ändamål, och i Python Tk, så fanns det inget liknande i C++. Och inte bara när det gäller GUI-utveckling, utan också klasser för att arbeta med nätverket, multimedia och andra mycket populära saker. Vilket utvecklarna var väldigt irriterade på. Tja, eftersom det finns efterfrågan tog utbudet inte lång tid att komma fram. 1995 släpptes den första utgåvan av biblioteket. Sedan dess har Qt snabbt expanderat utöver bara gränssnittsutveckling.

Därför bör Qt ses inte så mycket som en uppsättning klasser för att skapa ett GUI, utan snarare som en fullfjädrad verktygslåda med klasser för alla tillfällen. Detta är en uppsättning av allt (eller nästan allt) som en applikationsprogrammerare kan behöva för att skapa nästan vilken applikation som helst. Strukturen i biblioteket är logiskt uppdelad i komponenter, det finns många av dem och med varje ny version Qt har fler och mer användbara klasser i dem.

Det finns två huvudkomponenter - QtCore, som är kärnan i biblioteket, och QtGui, som representerar komponenterna i det grafiska gränssnittet. Som vi kommer att se senare, skapat projekt har alltid dessa två komponenter med sig (med undantag för konsolapplikationer, där QtCore spelar en obligatorisk roll).

Nåväl, beroende på behoven är utvecklarna fria att använda vad de än önskar. QtNetwork för att arbeta med nätverket, skriv din egen Torrent-klient. QtMultimedia för implementering av en video-ljudspelare. QtWebEngine för att bädda in en fullfjädrad webbläsarmotor i din applikation. Och mycket mer.

Det är också värt att notera att den deklarerade plattformsoberoende funktionaliteten verkligen finns. Du kan ta din kod utvecklad på ett system (Windows, MinGW) och kompilera den med kompilatorn för ett annat system (Linux, GCC) och få en binär fil som kan köras där utan mycket krångel. Som praxis har visat börjar speciella problem när applikationen blir tungt laddad med tredjepartsbibliotek.

En trevlig bonus för webbutvecklare kommer att vara möjligheten att utveckla program inte bara i C++, utan även i QML-språket, som är väldigt likt JavaScript. Detta är en speciell gren av Qt-utveckling som syftar till snabb prototypframställning och utveckling av mobila applikationer.

Och naturligtvis är en av höjdpunkterna med Qt utvecklingsmiljön Qt Creator. En universell och mycket bekväm utvecklingsmiljö på Qt, inte överbelastad med onödig funktionalitet.



Om du upptäcker ett fel markerar du ett textstycke och trycker på Ctrl+Enter
DELA: