הגירה מ-Qt 5 ל-Qt 6: מדריך שלב אחר שלב
גרסה חדשה עם תמיכה ארוכת טווח, 6.5, של מסגרת Qt שוחררה לאחרונה. היא מציגה תיקונים רבים, שיפורים ותכונות חדשות לעומת הגרסה הקודמת. חלקם עשויים להיות שימושיים עבור היישום שלך (אם לא כעת, כנראה בעתיד), ולכן מומלץ להעביר את היישום שלך לגרסה האחרונה של המסגרת.
אני יודע שיישומים רבים עדיין משתמשים ב-Qt 5, כך שהגירה ישירה לגרסה העדכנית ביותר של התשתית לא תהיה קלה. במאמר זה אני רוצה להצביע על השלבים הקריטיים ביותר להגירה חלקה מ-Qt 5 ל-Qt 6.
Qt 5 לעומת Qt 6 – הגירה? מדוע?
אנו יודעים ש-Qt היא אחת הטכנולוגיות הטובות ביותר בכל הנוגע לפיתוח ממשק משתמש ו ממשקי אדם-מכונה. אפשר לומר ש-Qt 5 טוב מספיק עבורכם. האפליקציה שלכם עובדת perfectly well, ואתם לא רואים יתרונות במיגרציה. במקום זאת, אתם חושבים על חסרונות, כגון בעיות בבנייה והרצה של אפליקציות או אינספור שעות של זמן מבוזבז. אני רוצה להציג לכם את היתרונות העיקריים של Qt 6 ובהמשך המאמר להראות שמיגרציה לא חייבת להיות מסע דרך הגיהינום.
אז, למה Qt 6?
- ביצועים משופרים: Qt 6 מציגה צינור רינדור חדש שמשפר את הביצועים ומפחית את צריכת הזיכרון, וכתוצאה מכך אפליקציות מהירות ומגיבות יותר.
- QML משופר: QML שופרה עם ביצועים טובים יותר, תמיכה משופרת בייצוא מחלקות C++ ל-QML וכלי עבודה עוצמתיים יותר לניפוי שגיאות בקוד QML. ה-Qt Quick Compiler החדש מאפשר לקמפל מראש קבצי QML לזמני אתחול מהירים יותר.
- מודולים משופרים. חלק מהמודולים נכתבו מחדש ושופרו, למשל Qt Quick 3D, Qt Multimedia ו-Qt WebEngine. שימוש בגרסה העדכנית ביותר של מודולים אלה יבטיח שהאפליקציה שלכם מעודכנת לתקנים הנוכחיים.
- מודולי תוספת: מודולים רבים יהיו זמינים כתוספות. הדבר יקטן את קובץ הבינארי של Qt ויאפשר לכם להוריד את המודול רק כאשר הוא נדרש בפרויקט.
- Backend מאוחד: Qt 6 מספק API יחיד לגישה לפונקציונליות ספציפית לפלטפורמה בסביבות שונות. זה כולל גרפיקה, מולטימדיה, קלט ומערכות חלונות.
- תמיכה ארוכת טווח: ל-Qt 5 כבר הגיע סוף חייו, ולמרות שעדיין קיימים תיקוני אבטחה ותיקוני באגים עבור חלק מהגרסאות הישנות יותר, כל תכונה או פונקציונליות חדשות יהיו זמינות רק ב-Qt 6. אם אינכם רוצים שהאפליקציה שלכם תהפוך למיושנת מהר מדי, עליכם לבצע את המיגרציה.
אלה הדברים המרכזיים שיבטיחו ששימוש בגרסה העדכנית ביותר של Qt 6 ישמור על האפליקציה שלך מעודכנת עם התכונות החדשות ביותר. הביצועים של האפליקציה שלך יהיו טובים יותר מבעבר, ויהיה קל יותר לתחזק את האפליקציה בעתיד.
מסלול הגירה ל-Qt 6
אם אתה מתחיל את הפרק הזה, סביר להניח שהחלטת לתת ל-Qt 6 הזדמנות. כעת אפרט את השלבים שיש לנקוט כדי להפוך את ההגירה לקלה ככל האפשר.
שלב 1. העברת Qt ל-Qt 5.15
אתם עשויים לומר, "למה? אני לא רוצה להעביר את האפליקציה שלי ל-Qt 5.15! אני רוצה להעביר אותה ל-Qt 6". אתם צודקים, אבל לפעמים קל יותר לעשות שני צעדים קטנים במקום צעד גדול אחד. במקרה שלנו, העברת האפליקציה לגרסה האחרונה של Qt 5 ואז מעבר ל-Qt 6 היא הרבה יותר קלה. הסיבה לכך היא ש-Qt שחררה מנגנונים להקלת המעבר ל-Qt 6 רק בגרסה 5.15. מהם המנגנונים הללו, ואיך משתמשים בהם? הדבר מתואר בשלב 4. מעבר מהגרסה הקודמת של Qt 5 לגרסה האחרונה של Qt 5 אמור להיות פשוט.
שלב 2. בדיקת שינויים במודולים
ב-Qt 6, חלק מהמודולים הזמינים ב-Qt 5 אינם זמינים עוד. המודולים הוסרו, שונו שמם או מוזגו למודול אחר. כמה מהמודולים שהוסרו כבר רועננו ונוספו למסגרת בגרסאות האחרונות.
על ידי בדיקת שינויי המודולים, תוכל להבטיח שהאפליקציה שלך תעבוד כצפוי לאחר ההגירה. הפתרונות האפשריים לגבי האופן שבו יש לנהוג כאשר מודול כבר אינו קיים יכולים להשתנות. הנה כמה דוגמאות למודולים שהוצאו משימוש וכיצד לעדכן את הקוד שמשתמש בהם.
- Qt Quick Controls 1 → יש להשתמש ב-Qt Quick Controls 2 החדש
- Qt Multimedia Widgets ← השתמשו ב-QML API מ-Qt Multimedia
- Qt Graphical Effects → השתמשו במודול Qt5Compat (Qt Quick MultiEffect מאז Qt 6.5)
אז, כפי שאתם יכולים לראות, הפעולות שלכם תלויות במודול שאתם צריכים להחליף. הרשימה המלאה של המודולים שהוסרו ושינויים אחרים ניתן למצוא ב-תיעוד Qt.
"האם עליי לבדוק שינויים בכל מודול בתיעוד?"
לא, אין חובה לעשות זאת. זה יכול לעזור לך למצוא את התחליף הנכון ל-API שהוצא משימוש, אך כלי Qt יכולים ליידע אותך על כל חלקי הקוד שלך שאינם נתמכים עוד. תמצא מידע נוסף על כך בשלב 4.
שלב 3. העברת Qt: בדוק את הסביבה שלך
Qt 6 דורש מהדר C++17 ומעלה (למשל, עבור Windows – MinGW 8.1.0 או msvc 2019), כך שאם אתם משתמשים בגרסה ישנה יותר, הגיע הזמן לשדרג. הכלים שפותחו על ידי Qt Company תומכים גם ב-Qt 6 החל מגרסאות ספציפיות. עבור Qt Creator, זוהי גרסה 4.14, ועבור Qt Design Studio, זוהי גרסה 2.0.
אם מהדר וכלים נכונים מותקנים, האפליקציה שהוכנה ל-Qt 6 אמורה להיבנות ולפעול כראוי לאחר ההעברה.
שלב 4. ביצוע העברה ל-Qt 6
היפטרו מתכונות שהוצאו משימוש.
ב-Qt 5.15, כל הדברים שלא ייכללו ב-Qt 6 מסומנים כלא מומלצים לשימוש. כברירת מחדל, השימוש בקוד זה יופיע כאזהרת מהדר. אך יש לך אפשרות להתייחס אליו כשגיאה.
כדי להבטיח זאת, עליכם להגדיר את QT_DISABLE_DEPRECATED_BEFORE. יש להגדיר אותו ל-0x050F00. כאשר המאקרו מוגדר, הפונקציות שהוצאו משימוש (בגרסה נתונה של Qt או בכל גרסה מוקדמת יותר) יושבתו.
אם אתם רואים שגיאות כלשהן במהלך הבנייה, עליכם לבצע refactor לחלק הזה.
//qmake project file DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x050F00 //CMakeLists.txt add_compile_definitions(QT_DISABLE_DEPRECATED_BEFORE=0x050F00)


הרצה clazy ולהיפטר מהאזהרות הללו.
Clazy הוא כלי לניתוח סטטי הזמין כתוסף ב-QtCreator. Clazy יכול לנתח את הקוד ולהראות לך מה כדאי לשפר. ניתן לומר ל-Clazy במפורש מה לבדוק במהלך ההרצה. קיימות אפשרויות מיוחדות שיש לסמן שיכולות להצביע על החלק בקוד שאינו נתמך ב-Qt 6. Clazy מסוגל גם לתקן את האזהרות הללו בעצמו, כך שהדבר היחיד שעליך לעשות הוא להריץ את המנתח.
אפשרויות Clazy המועילות במהלך ההעברה:
qt6-deprecated-api-fixesqt6-header-fixesqt6-qhash-signatureqt6-fwd-fixesmissing-qobject-macro



השתמש במודול Qt5Compat היכן שנדרש.
בשלב 2 הזכרתי משהו שנקרא מודול Qt5Compat. מה זה?
המודול הוצג כדי לסייע לך בתהליך ההגירה. הוא מספק חלק מהמחלקות שאינן קיימות עוד ב-Qt 6, כגון QRegExp ו-QStringRef, אך הודות לכך ניתן עדיין להשתמש בו ביישומי Qt 6. לדוגמה, המודול GraphicalEffects. הוא אינו זמין עוד ב-Qt 6, אך אם היישום שלך עושה שימוש רב באפקטים, יהיה קשה להגר בקלות ללא רגרסיות. לכן Qt מאפשרת לך להשתמש ב-API הישן.
זה לא אומר שזו הדרך הנכונה. ממילא יש להחליף את ה-API הישן. אבל מודול Qt5Compat נותן לכם זמן למצוא תחליף לכל מה שהוצא משימוש.
השימוש במודול Qt Graphical Effects הוא הדוגמה המושלמת. המודול נעלם ב-Qt 6 אך יוצג מחדש כ-MultiEffect באחת מהגרסאות הבאות. לכן, בינתיים אנו יכולים להשתמש במודול Qt5Compat כדי להבטיח תאימות. אך כאשר מודול MultiEffect יהיה זמין, יש לשכתב את הקוד כדי לחתוך את ה-API המיושן.
כיצד לייבא את המודול לפרויקט שלכם:
//qmake project file QT += core5compat //CMakeLists.txt find_package(Qt6 REQUIRED COMPONENTS Core5Compat) target_link_libraries(mytarget PRIVATE Qt6::Core5Compat)
הדבר האחרון שעליכם לשנות הוא שינוי הצהרות הייבוא בקוד C++ או QML.
// Qt 5 #include <QtCore/QRegExp> // Qt 6 #include <QtCore5Compat/QRegExp>
שלב 5. בדיקת היישום
יש לבצע את הבדיקה של האפליקציה כשלב אחרון. עליך לבצע בדיקות יחידה ולבדוק את הפלט החזותי של האפליקציה. אפליקציות QML ב-Qt 6 משתמשות ב-backend גרפי חדש, ולכן ביצוע בדיקות הרגרסיה הוא חלק חשוב מההגירה.
כמובן, השוואה של כל המרכיבים החזותיים באפליקציה עשויה לקחת זמן, ולכן מומלץ להפוך את הבדיקות הללו לאוטומטיות. ניתן להשוות את צילום המסך של כל תצוגה באפליקציה באופן פיקסל-אחר-פיקסל עם הפלט האחרון, ולקבל התראה אם משהו אינו תקין.
אל דאגה אם משהו נראה שונה לאחר ההגירה. עדיין יש לך אפשרות להשתמש ידנית בקריאות OpenGL (מודול Qt OpenGL) שהיו בשימוש כברירת מחדל ב-Qt 5.
הפיקו תועלת מהעברת Qt
המעבר מ-Qt 5 ל-Qt 6 עשוי להיות מאתגר, אך השלבים לעיל אמורים להקל על התהליך. שלבים אלה כוללים הבנת השינויים והתכונות החדשות ב-Qt 6, זיהוי בעיות תאימות אפשריות, ריפקטורינג של הקוד הנדרש, עדכון כלים ומערכות בנייה, ובדיקה קפדנית של האפליקציה.
המעבר ל-Qt 6 בהחלט שווה את הזמן שהושקע. Qt 6 מספק שיפורים רבים ותכונות חדשות שאינן זמינות בגרסה הישנה יותר. הוא יהפוך את היישום שלך לקל יותר לתחזוקה ולפיתוח לשנים רבות קדימה.
אנו יכולים לעזור לכם עם המיגרציה. ראו את הצעת Qt למידע נוסף.
arrow_circle_rightצרו קשר
בואו נדון כיצד תוכלו לשפר את האפליקציה שלכם עם טכנולוגיית Qt
arrow_circle_right המאמרים שלנו