Qt (ערכת כלים)

**Qt** (יוצריה הוגים זאת כמו המילה האנגלית Cute, **"קְיוּט"**), היא ערכת כלים וסביבת פיתוח לתוכנות חוצות-פלטפורמות, המשמשת בעיקר לפיתוח ממשקי משתמש גרפיים (במקרה זה היא נקראת ערכת widgets), אך משמשת גם לפיתוח תוכנות ללא ממשק גרפי, כגון כלי קונסול ותוכנות לשרתים.

Qt מפותחת על ידי The Qt Company המבוססת כיום בפינלנד, שבמקור נוסדה בנורווגיה ונקראה Trolltech.

Qt משתמשת בקוד ++C בשילוב עם מספר הרחבות לא סטנדרטיות. אליהן נוסף קדם-מעבד (Pre-Processor) היוצר קוד ++C סטנדרטי לפני ההידור. ניתן להשתמש ב-Qt בשפות נוספות; קיימת הרחבה עבור שפת ADA בשם QtAda, הרחבה עבור #C בשם Qyoto/Kimono, הרחבה עבור Java בשם Qt Jambi, והרחבות נוספות ל-Pascal, Perl, PHP, Ruby, פייתון ועוד. Qt רצה על כל הפלטפורמות העיקריות, אינה מוגבלת למערכת הפעלה או חומרה מסוימת ובעלת תמיכה נרחבת בבינאום. מלבד יצירת ממשקי משתמש גרפיים, Qt תומכת ב-SQL, ניתוח XML, ניהול תהליכים, תמיכה ברשתות, ממשק אחיד לניהול קבצים ועוד.

תוכנות ידועות שפותחו בשימוש ב-Qt הן סקייפ, Google Earth, Opera, KDE, ועוד.

## מגוון גרסאות
Qt הופצה על ידי Trolltech בפלטפורמות הבאות:
* Qt/X11 – עבור מערכות מבוססות X Windows, כדוגמת Unix או Linux.
* Qt/Mac –עבור מערכת ההפעלה Mac OS X של Apple.
* Qt/Windows –עבור מערכת ההפעלה חלונות של מיקרוסופט.
* Qt/Embedded –עבור פלטפורמות מוכללות (סמרטפונים, מחשבי כף יד וכו').
* Qt/WinCE – עבור מערכת ההפעלה חלונותCE.
* Qt Jambi – עבור שפת Java.
* Qt Extended – עבור מחשבים ניידים מבוססי לינוקס (לא נתמך יותר).

קיימות ארבע גרסאות זמינות של Qt לכל אחת מהפלטפורמות, ונקראות:
* Qt Console – גרסה לפיתוח תוכנות ללא ממשק משתמש גרפי.
* Qt Desktop Light – גרסה בסיסית של Qt ליצירת ממשק משתמש גרפי, ללא תמיכה ברשתות או בסיסי נתונים.
* Qt Desktop – גרסה מלאה.
* Qt Open Source Edition – גרסה "מלאה", מלבד חריגים מסוימים, עבור מפתחי קוד פתוח או תוכנות חופשיות.

## רישוי
עבור גרסאות הקודמות לגרסה 4.5, Qt זמינה תחת רישיון כפול, GPL גרסה 2 או גרסה 3, עם חריגים מיוחדים, ותמיכה ברישיון מסחרי בכל הפלטפורמות הנתמכות. הרישיון המסחרי מאפשר לתוכנות שנוצרות בעזרת Qt להיות תחת רישיונות קוד פתוח או תוכנה חופשית, כגון LGPL או רישיון אומנותי (Artistic License) או רישיון תוכנה קנייני. עד גרסה 1.45, Qt הופצה תחת רישיון FreeQt, שלא נחשב כרישיון חופשי העונה להגדרות רישיונות חופשיים של קרן התוכנה החופשית. עם שחרור גרסה 2.0 של הערכה, הרישיון שונה להיות Q Public License (שנקרא QPL), רישיון תוכנה חופשי, אך עדיין לא מותאם לרישיון GPL של קרן התוכנה החופשית. חברת Trolltech ו-KDE הגיעו לפשרות שבהן נאמר כי Qt לא תופץ ברישיון מגביל יותר מ-QPL, אפילו אם Trolltech תירכש על ידי חברה אחרת או תפשוט רגל.

ב-3 במרץ 2009, נוקיה הפיצה את גרסה 4.5 של Qt גם תחת רישיוןLGPL.

כל הגרסאות תומכות במגוון רחב של מהדרים, בין היתר במהדר GCC של ++C, ותמיכה ב-Visual Studio של מיקרוסופט.
בנוסף, קיימים תוספים עבור Visual Studio ו-Eclipse, כמו גם עורך קוד ייעודי - QtCreator.

## גרסה נוכחית
ב-28 ביוני 2005, Trolltech הוציאה את גרסה 4 של Qt, ובה הציגה חמש טכנולוגיות חדשות בסביבת העבודה:
* צבעוני (Tulip) – סט של עצמי-מכלים גנריים (Template Containter Classes).
* ראיון (Interview) – מודל או ארכיטקטורת הצגה להצגת עצמים.
* ארתור (Arthur) – סביבת עבודה לציורים דו-ממדיים.
* רשם (Scribe) – מציג טקסט Unicode עם API (ממשק תכנות יישומים) כללי לביצוע סידור טקסט ברמת עבודה נמוכה.
* חלון-ראשי (MainWindow) – חלון ראשי מודרני מבוסס פעולות, בעל תפריטים, אפשרויות עגינת חלונות, שורת מצב ועוד.

גרסה 4.1 של Qt, שיצאה ב-19 בנובמבר 2005, הציגה בין היתר תמיכה מובנית ביצירת PDF ובהצגת קובצי SVG.

גרסה 4.2 של Qt, שיצאה ב-4 באוקטובר 2006, הציגה בין היתר תמיכה בוויסטה, תמיכה טבעית בעיצוב Widgets בעזרת CSS, אובייקט לתמיכה בהצגה יעילה של אובייקטים דו-ממדיים על המסך.

גרסה 4.3 של Qt, שיצאה ב-30 במאי 2007, הציגה בין היתר שיפור בתמיכה בוויסטה, שיפור התמיכה ב-OpenGL, יצירת קובצי SVG.

גרסה 4.4 של Qt, שיצאה ב-6 במאי 2008, הציגה בין היתר שיפור בתמיכה במולטימדיה (בעזרת API של נגן המולטימדיה Phonon), תמיכה מורחבת ב-XML, סביבת עבודה ממוקבלת לשיפור הפיתוח של מערכות מרובות-תהליכים.

גרסה 4.5 של Qt, שיצאה ב-3 במרץ 2009, הציגה תוספות משמעותיות, בין היתר את QtCreator – עורך הקוד של Qt, מנוע גרפי משופר, תמיכה בפורמטים של OpenDocument. כמו כן, הופצה הגרסה תחת רישיון LGPL לראשונה.

## היסטוריה
האוורד נורד ואיריק צ'מב-אנג (המפתחים המקוריים של Qt, והמנכ"ל והנשיא בהתאמה של Trolltech), התחילו לפתח את Qt בשנת 1991, שלוש שנים לפני שהחברה התאחדה עם קוואזר-טכנולוגיות, שינתה את שמה ל-Troll Tech, ולבסוף ל-Trolltech.

ערכת הכלים נקראה Qt כיוון שהאות Q נראתה נעימה לעין בפורט שבו האוורד השתמש בתוכנת ה-Emacs (תוכנה לעריכת טקסט בלינוקס/יוניקס), והאות t נלקחה מ-Xt, ערכת כלים מבוססת מערכת חלונות X (מערכת הפעלה לינוקסית).

בשנת 1998 נוצרה מחלוקת, כשהתברר ש-KDE הולכת להיות אחת מסביבות שולחנות העבודה המובילות ללינוקס. כיוון ש-KDE התבססה על Qt, רבים מתנועת התוכנה החופשית חששו שחלק עיקרי ממערכת ההפעלה החופשית העיקרית יהיה קנייני.

דבר זה הוביל לשני כיוונים: ערכת הכלים "הרמוניה", שחרתה על דגלה לשכפל את ערכת Qt לחלוטין תחת רישיון תוכנה חופשית, ושולחן העבודה GNOME, אשר שאף לדחוק את KDE לגמרי. שולחן העבודה GNOME התבסס כולו על ערכת GTK+, אשר נכתבה במקור עבור GIMP (תוכנת קוד פתוח לעריכת תמונות), ומבוססת על קוד בשפת C.

שתי הגרסאות הראשונות של Qt כללו תמיכה בשתי מערכות הפעלה: Qt/X11 עבור יוניקס ו-Qt/Windows עבור חלונות. הגרסה לחלונות הייתה זמינה רק תחת רישיון קנייני, דבר שגרם לכך שלא היה ניתן להעביר לחלונות תוכנות חופשיות או בעלות קוד פתוח אשר נכתבו ב-Qt עבור X11, מבלי לרכוש גרסת QPL (רישיון קנייני של Qt). בסוף שנת 2001, Trolltech הוציאה את Qt 3.0 אשר הוסיפה תמיכה למערכת ההפעלה Mac OS X. גם גרסה זו הייתה מבוססת רישיון קנייני בלבד, עד יוני 2003, אז הוציאה טרולטק את Qt 3.2, עם תמיכה במערכת ההפעלה Mac OS X תחת רישיון GPL.

בשנת 2002, חברים בפרויקט KDE החלו להמיר את הקוד של Qt/X11 המבוסס GPL לחלונות. דבר זה נעשה בעקבות סירובה של טרולטק להפיץ גרסת Qt תחת רישיון GPL בטענה כי חלונות אינה תוכנה חופשית או בעלת קוד פתוח. אף על פי שפרויקט זה לא הגיע לאיכות של המקור, הוא השיג הצלחה משמעותית.

בעיות הרישיון נפתרו ביוני 2005, כאשר טרולטק הוציאה את Qt/Windows 4 תחת רישיון GPL. Qt גרסה 4 תומכת באותו סט של מערכות הפעלה במהדורה החופשית או בעלת הקוד הפתוח, כמו במהדורה הקניינית. דבר זה מאפשר ליצור תוכנות חופשיות או מבוססות קוד פתוח תחת רישיון GPL בעזרת Qt, בכל מערכות ההפעלה הנתמכות.

ביוני 2008 נוקיה רכשה את טרולטק על מנת להאיץ את אסטרטגיית פיתוח תוכנות חוצות-פלטפורמות, וכדי לפתח שירותי אינטרנט עסקיים. בספטמבר אותה שנה, נוקיה שינתה את שמה של טרולטק ל-Qt software.

באוגוסט 2012 רכשה דיגיה הפינית, חברה שקודם לכן רכשה מנוקיה את הזכויות המסחריות על Qt, את הבעלות המלאה על Qt, והפכה לאחראית בלעדית על המשך פיתוח והפצת הספרייה.https://web.archive.org/web/20150324125507/http://www.digia.com/en/Home/Company/Press/2012/Digia-to-acquire-Qt-from-Nokia/ דיגיה הרחיבה את התמיכה ב-Qt גם לפלטפורמות נוספות, כגון אנדרואיד ו-IOS 7.

בספטמבר 2014 הסבה דיגיה את צוות הפיתוח של Qt לחברת בת עצמאית בשם The Qt Company. במאי 2016 נפרדו החברות זו מזו לשתי חברות בלתי תלויות, כאשר The Qt Company הונפקה בנסד"ק הלסינקי.

## סניפים
לחברת טרולטק יש סניפים ברחבי העולם, בסין, בגרמניה בארצות הברית באוסטרליה, והחל משנת 2008, גם בישראל. בארץ החברה מיוצגת על ידי "טאקט פתרונות תוכנה".

## רעיונות מרכזיים
### שימוש בפקודות ממשק משתמש טבעי תלוי מערכת הפעלה
גרסאות ראשונות של Qt השתמשו במראה ממשק משתמש שנוצר על ידי Qt עצמו, ובא לדמות את המראה של הפלטפורמה המתאימה; דבר זה גרם לעיתים לאי-התאמה במראה המערכת. הגרסאות האחרונות של Qt משתמשות בפקודות (API) טבעיות של מערכת ההפעלה על מנת ליצור את הכפתורים שלQt.

### מהדר מטא-אובייקטים
מהדר מטא-אובייקטים (Meta Object Compiler – Moc) הוא כלי שרץ על תוכניות שכתובות ב-Qt לפני ההידור שלהן. המהדר הזה יוצר קוד ++C עם מטא-מידע על האובייקטים של התוכנית. Qt משתמש במטא-מידע זה על מנת ליצור אפשרויות שלא טבעיות בשפת ++C, לדוגמה: מערכת האותות/חריצים, קריאות א-סינכרוניות לפונקציות וכולי.

#### מחלוקת
קיימת ביקורת על השימוש בכלי זה כדי להפוך את התכנות ב-Qt לשונה מתכנות טבעי ב-++C. הועברה ביקורת במיוחד על מימוש המשתמש במאקרו (Macro) עקב חוסר בבטיחות סוגי משתנים, וזיהום של namespace. חברת טרולטק מחשיבה זאת כהכרח על מנת לאפשר את מנגנון האותות וחריצים הנוצרים באופן דינמי.

### מפענח סקריפטים
Qt Script היא ערכת כלים חוצת-פלטפורמות שהמאפשרת למפתחים להפוך את תוכנות ה-Qt שלהם, מבוססות ++C, לניתנות לשינוי בעזרת סקריפטים, בעזרת שפת סקריפטים ניתנת-לפירוש, בדומה ל-JavaScript.
החל מגרסה 4.3.0 של Qt, אוסף פקודות הסקריפטים הן חלק מליבת Qt ולא באים בתור ספרייה נפרדת.

### קוד תוכנית "Hello World" ב-Qt
ב-Qt, תוכנית לכתיבת Hello World נכתבת כך:


```cpp
#include <QApplication>
#include <QLabel>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QLabel label("Hello, world!");
    label.show();
    return app.exec();
}
```


## התוכנות השונות המרכיבות את Qt
חבילת הפיתוח של Qt מגיעה עם ארבע תוכנות בסיסיות עיקריות:
* Qt Examples and Demos
* QtAssistant
* QtDesigner
* QtLinguist
החל מגרסה 4.5 מצורפת תוכנה חמישית, לעריכת הקבצים, בשם QtCreator.

### Qt Examples and Demos
Qt Examples and Demos היא תוכנה המאפשרת הצגה של אוסף התוכנות לדוגמה וה-demos, המדגימים עקרונות תכנות נכון בסביבת Qt. כל אחת מהתוכנות ניתן להרצה, וניתן להסתכל על קוד המקור שלה, שנבנה תוך הקפדה על הדגשת העקרונות. הדוגמאות מחולקות לקטגוריות, ביניהן: תכנות ממוקבל, עבודה עם desktop, שימוש ב-widgets שונים, עבודה עם התוכנות השונות המצורפות, SQL, XML, עבודה עם threads ועוד.

### QtAssistant
QtAssistant היא תוכנה להצגת מסמכים מקוונים, תוך דגש על מסמכי עזרה. תוכנה זו עובדת באופן דומה לדפדפן (בעלת חלון תצוגה ראשי, חיפוש, ותמיכה בהיפר-קישורים, החל מגרסה 4.4 היא מבוססת על WebKit), וניתן לבצע bookmark לעמודים חשובים. בנוסף לדפדפנים רגילים, התוכנה מאפשרת ניווט יעיל ומשופר בעזרת מנוע חיפוש מתקדם, שמאנדקס את כל העמודים בקובץ העזרה הדחוס, כך שניתן לחפש מילים וביטויים ספציפיים בקובץ. בנוסף, התוכנה מציעה חיפוש מילים מלא.

### QtDesigner
QtDesigner היא תוכנה לעיצוב ובניית ממשקי משתמש גרפיים בעזרת רכיבי Qt. ניתן לעצב באופן אישי את ה-widgets בצורת WYSIWYG (What You See Is What You Get), ולבדוק אותם בעזרת עיצובים שונים. התוכנה תומכת במנגנון האותות והחריצים, וניתן לקשר רכיבים בצורה זו באופן גרפי (על ידי חיבור רכיב השולח אות לרכיב המקבל אות). כמו כן, ניתן להשתמש ברכיבים שנוצרו על ידי המתכנת. הרכיבים שנוצרו בעזרת QtDesigner מתמזגים עם הקוד שהמתכנת כותב, וניתן לגשת ולשנות ערכים שנקבעו ב-QtDesigner באמצעות קוד באופן דינמי.

### QtLinguist
QtLinguist היא תוכנה המאפשרת תרגום של שדות טקסט משפת המקור לשפות שונות. התוכנה ממפה את המחרוזות שהמתכנתים מסמנים לתרגום (בעזרת פונקציה מיוחדת), ומאפשרת לתרגם את ערכים אלה לשפות שונות, בהתאם להקשרים שבהם הם נמצאים. התוכנה יכולה להבדיל בין אפשרויות שפה שונות (שייכות, יחיד-רבים וכו') בעזרת סימון שהמתכנתים שמים, ותומכת בהכנסה במשתנים בצורה תלויית-שפה. QtLinguist מייצרת קובץ המאגד את התרגומים השונים בצורה דחוסה ומהירה, ומאפשר את צירופם לתוכנה.

### QtCreator
QtCreator היא סביבת פיתוח משולבת (IDE) הרצה על מספר פלטפורמות ומותאמת במיוחד למתכנתי Qt. תכונות העורך מתמקדות בתמיכה במשתמשים חדשים, כמו גם בהגברת היעילות של משתמשים ותיקים. בין התכונות האלה קיימות: עורך קוד מתקדם בסביבת C++, QtDesigner מובנה, כלי ניהול פרויקטים, מערכת עזרה מובנית ותלוית הקשר, תוכנת ניפוי שגיאות ויזואלית (debugger) ועוד.

## דוגמאות לתוכנות המבוססות Qt
* Adobe Photoshop Album – תוכנה לארגון וסידור תמונות.
* Doxygen – יוצר מסמכי ממשק תכנות יישומים (API) לתוכנות.
* Freemat – סביבת חישובים נומריים ושפת תכנות חופשית.
* Google Earth – תוכנה להצגת מיפוי תלת־ממדי.
* KDE – סביבות עבודה פופולרית מבוססת לינוקס.
* LyX – ממשק משתמש גרפי עבור תוכנת LaTeX.
* Motorola A760 – משתמש בממשק המשתמש שלו בגרסת Qt/Embedded.
* Opera/Linux based – דפדפן אינטרנט.
* סקייפ – תוכנת VoIP בשיטת P2P.
* VirtualBox – תוכנה לווירטואליזציה (Virtualization) של מחשבים.
* VLC Media Player – תוכנת קוד פתוח להצגת סרטים. מבוססת ממשק Qt החל מגרסה 0.9.
* QGIS - תכנה לניהול מערכת מידע גאוגרפי.
* GCompris - מארז תוכנה בידורית לילדים
* KeePassXC - מנהל ססמאות

## קישורים חיצוניים

* 

## הערות שוליים

קטגוריה:תכנות
קטגוריה:KDE
קטגוריה:תוכנות שהושקו ב-1992
קטגוריה:תוכנה חוצת פלטפורמות
קטגוריה:ערכות