שלום אורח התחבר

חיבור אירועים בשיטת Signals and Slots

אורך הפרק כ-11 דקות

 

סיגנל הוא אירוע שנוצר על ידי פקד מסוים ורלוונטי לאותו פקד. ספריית Qt דרך המחלקה QObject מגיעה עם מימוש לטבלת קריאות דינמית לפונקציות טיפול. כל אוביקט היורש מ QObject מקבל טבלא כזו והפעלת סיגנל היא בעצם קריאה לכל הפונקציות המחוברות לסיגנל זה לפי סדר החיבור.

הפונקציה QObject::connect מחברת קוד טיפול לסיגנל. הכתיב החדש שלה משתמש במצביעים לפונקציה ונראה כך:

    QObject::connect(ui->from, &QLineEdit::textChanged,
                     this, &MainWindow::copyTextFromSignal);

בעבר החיבור התבצע באמצעות מחרוזות, ועדיין חיבור באמצעות מחרוזות רלוונטי כשיש overload בפרמטרים של סיגנל, כלומר כשמוגדרים שני סיגנלים שונים באותו שם עם פרמטרים שונים שניתן להמיר ביניהם. במצב כזה Qt לא ידע באיזה סיגנל לבחור ולכן כדאי להשתמש בתחביר הישן במקרה כזה:

    QObject::connect(ui->from, SIGNAL(textChanged(QString)),
                     this, SLOT(copyTextFromEditToLabel()));

מקרה כזה הוא הסיגנל valueChanged של QSpinBox שנשלח גם עם פרמטר int וגם עם פרמטר QString. אפשר לקרוא עוד על הבעיה והפתרון בשאלה בקישור זה.