15 QSizeTicker::sizeHint() const
16 {
17 return fontMetrics().size(0, text());
18 }
Π€ΡΠ½ΠΊΡΠΈΡ sizeHint() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΎΠ±Π»Π°ΡΡΠΈ, Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠΉ ΡΠ΅ΠΊΡΡΠΎΠΌ. Π€ΡΠ½ΠΊΡΠΈΡ QWidget::fontMetrics() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ QFontMetrics, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠΈΡΡΠ° Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠ°. (Π ΠΏΠ΅ΡΠ²ΠΎΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ QFontMetrics::size() Π·Π°Π΄Π°Π΅ΡΡΡ ΡΠ»Π°ΠΆΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ Π½ΡΠΆΠ΅Π½ Π΄Π»Ρ ΠΏΡΠΎΡΡΡΡ ΡΡΡΠΎΠΊ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ 0.)
19 void Ticker::paintEvent(QPaintEvent * /* event */)
20 {
21 QPainter painter(this);
22 int textWidth = fontMetrics().width(text());
23 if (textWidth < 1)
24 return;
25 int Ρ = -offset;
26 while (x < width()) {
27 painter.drawText(x, 0, textWidth, height(),
28 Qt::AlignLeft | Qt::AlignVCenter, text());
29 x += textWidth;
30 }
31 }
Π€ΡΠ½ΠΊΡΠΈΡ paintEvent() ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ ΡΠ΅ΠΊΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ QPainter::drawText(). ΠΠ½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡ fontMetrics() Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΎΠ±Π»Π°ΡΡΠΈ, Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠΉ ΡΠ΅ΠΊΡΡΠΎΠΌ ΠΏΠΎ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΠΈ, ΠΈ Π·Π°ΡΠ΅ΠΌ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΠ΅ΠΊΡΡ ΡΡΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π»Ρ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° ΠΏΠΎ Π²ΡΠ΅ΠΉ Π΅Π³ΠΎ ΡΠΈΡΠΈΠ½Π΅, ΡΡΠΈΡΡΠ²Π°Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ offset.
32 void Ticker::showEvent(QShowEvent * /* event */)
33 {
34 myTimerId = startTimer(30);
35 }
ΡΡΠ½ΠΊΡΠΈΡ showEvent() Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΡΠ°ΠΉΠΌΠ΅Ρ. ΠΡΠ·ΠΎΠ² QObject::startTimer() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΈΡΠ»ΠΎβΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ·ΠΆΠ΅ Π΄Π»Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΡΠ°ΠΉΠΌΠ΅ΡΠ°. QObject ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΡ ΡΠ°ΠΉΠΌΠ΅ΡΠΎΠ², ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ²ΠΎΠΉ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π». ΠΠΎΡΠ»Π΅ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ startTimer() Qt Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠΎΠ±ΡΡΠΈΠ΅ ΡΠ°ΠΉΠΌΠ΅ΡΠ° ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΅ΡΠ΅Π· ΠΊΠ°ΠΆΠ΄ΡΠ΅ 30 ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄, ΠΏΡΠΈΡΠ΅ΠΌ ΡΠΎΡΠ½ΠΎΡΡΡ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ.
ΠΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΡΡΠ½ΠΊΡΠΈΡ startTimer() Π²ΡΠ·Π²Π°ΡΡ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ Ticker, Π½ΠΎ ΠΌΡ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅ΡΡΡΡΡ Π·Π° ΡΡΠ΅Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ Qt ΡΠΎΠ±ΡΡΠΈΠΉ ΡΠ°ΠΉΠΌΠ΅ΡΠ° ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ΅Ρ ΡΠ»ΡΡΠ°ΡΡ , ΠΊΠΎΠ³Π΄Π° Π²ΠΈΠ΄ΠΆΠ΅Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²ΠΈΠ΄ΠΈΠΌ.
36 void Ticker::timerEvent(QTimerEvent *event)
37 {
38 if (event->timerId() == myTimerId) {
39 ++offset;
40 if (offset >= fontMetrics().width(text()))
41 offset= 0;
42 scroll(-1, 0);
43 } else {
44 QWidget::timerEvent(event);
45 }
46 }
Π€ΡΠ½ΠΊΡΠΈΡ timerEvent() Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΌΠΎΠΌΠ΅Π½ΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. ΠΠ½Π° ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ offset Π½Π° 1 Π΄Π»Ρ ΠΈΠΌΠΈΡΠ°ΡΠΈΠΈ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΏΠΎ Π²ΡΠ΅ΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΡΠ²ΠΎΠ΄Π° ΡΠ΅ΠΊΡΡΠ°. ΠΠ°ΡΠ΅ΠΌ ΠΎΠ½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΏΠΈΠΊΡΠ΅Π»Ρ Π²Π»Π΅Π²ΠΎ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡyΠ½ΠΊΡΠΈΠΈ QWidget::scroll(). ΠΠΏΠΎΠ»Π½Π΅ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ update() Π²ΠΌΠ΅ΡΡΠΎ scroll(), Π½ΠΎ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ scroll() Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π΅Π½, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½Π° ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ Π½Π° ΡΠΊΡΠ°Π½Π΅ ΠΏΠΈΠΊΡΠ΅Π»ΠΈ ΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠΎΠ±ΡΡΠΈΠ΅ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ ΠΎΡΠΊΡΡΠ²ΡΠ΅ΠΉΡΡ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° (ΠΊΠΎΡΠΎΡΠ°Ρ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΏΠΎΠ»ΠΎΡΡ ΡΠΈΡΠΈΠ½ΠΎΠΉ Π² ΠΎΠ΄ΠΈΠ½ ΠΏΠΈΠΊΡΠ΅Π»Ρ).
ΠΡΠ»ΠΈ ΡΠΎΠ±ΡΡΠΈΠ΅ ΡΠ°ΠΉΠΌΠ΅ΡΠ° Π½Π΅ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ Π½Π°ΡΠ΅ΠΌΡ ΡΠ°ΠΉΠΌΠ΅ΡΡ, ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ Π΅Π³ΠΎ Π΄Π°Π»ΡΡΠ΅ Π² Π½Π°Ρ Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ.
47 void Ticker::hideEvent(QHideEvent * /* event */)
48 {
49 killTimer(myTimerId);
50 }
Π€ΡΠ½ΠΊΡΠΈΡ hideEvent() Π²ΡΠ·ΡΠ²Π°Π΅Ρ QObject::killTimer() Π΄Π»Ρ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠ°ΠΉΠΌΠ΅ΡΠ°.
Π‘ΠΎΠ±ΡΡΠΈΡ ΡΠ°ΠΉΠΌΠ΅ΡΠ° ΡΠ²Π»ΡΡΡΡΡ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΌΠΈ ΡΠΎΠ±ΡΡΠΈΡΠΌΠΈ, ΠΈ Π΅ΡΠ»ΠΈ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠ΅ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΉΠΌΠ΅ΡΠΎΠ², ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ»ΠΎΠΆΠ½ΠΈΡΡ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ Π²ΡΠ΅Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² ΡΠ°ΠΉΠΌΠ΅ΡΠΎΠ². Π ΡΠ°ΠΊΠΈΡ ΡΠΈΡΡΠ°ΡΠΈΡΡ ΠΎΠ±ΡΡΠ½ΠΎ Π»Π΅Π³ΡΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ°ΠΉΠΌΠ΅ΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡ QTimer. QTimer Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠ΅ΡΠ΅Π· Π·Π°Π΄Π°Π½Π½ΡΠΉ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» ΡΠΈΠ³Π½Π°Π» timeout(). QTimer ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΡΠ΄ΠΎΠ±Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠΊΡΠ°ΡΠ½ΡΡ ΡΠ°ΠΉΠΌΠ΅ΡΠΎΠ² (ΡΠΎ Π΅ΡΡΡ ΡΠ°ΠΉΠΌΠ΅ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·).
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠΈΠ»ΡΡΡΠΎΠ² ΡΠΎΠ±ΡΡΠΈΠΉ
ΠΠ΄Π½ΠΈΠΌ ΠΈΠ· Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΡ ΡΡΠ΅Π΄ΡΡΠ² Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ Qt ΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠ° QObject ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠ±ΡΡΠΈΡ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠ° QObject Π΅ΡΠ΅ Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π΄ΠΎΠΉΠ΄ΡΡ Π΄ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ.
ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ Π½Π°Ρ Π²ΠΈΠ΄ΠΆΠ΅Ρ CustomerInfoDialog ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠΎΠ² ΡΡΡΠΎΠΊ QLineEdit ΠΈ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ»Π°Π²ΠΈΡΡ Space (ΠΏΡΠΎΠ±Π΅Π») Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΡΠΎΠΊΡΡΠ° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ QLineEdit. Π’Π°ΠΊΠΎΠΉ Π½Π΅ΠΎΠ±ΡΡΠ½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ ΡΠ°Π±ΠΎΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΠΎΠΉ Π΄Π»Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ Π½ΡΠΆΠ΄, ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΈΠΌΠ΅ΡΡ Π½Π°Π²ΡΠΊ ΡΠ°Π±ΠΎΡΡ Π² ΡΠ°ΠΊΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅. ΠΡΠΎΡΡΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠ° QLineEdit ΠΈ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΡyΠ½ΠΊΡΠΈΠΈ keyPressEvent() Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° focusNextChild(), ΠΈ ΠΎΠ½ΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
01 void MyLineEdit::keyPressEvent(QKeyEvent *event)
02 {
03 if (event->key()== Qt::Key_Space) {
04 focusNextChild();
05 } else {
06 QLineEdit::keyPressEvent(event);
07 }
08 }
ΠΡΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΈΠΌΠ΅Π΅Ρ ΠΎΠ΄ΠΈΠ½ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ: Π΅ΡΠ»ΠΈ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π² ΡΠΎΡΠΌΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π²ΠΈΠ΄ΠΎΠ² Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ² (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, QComboBox ΠΈ QSpinBox), ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈΡ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΡ Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±ΡΠ°Π·Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ. ΠΡΡΡΠ΅Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΠ΅ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠΌ CustomerInfoDialog ΡΠΎΠ±ΡΡΠΈΠΉ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ ΡΠ²ΠΎΠΈΡ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ² ΠΈ Π² ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ Π² Π΅Π³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅. ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠΈΠ»ΡΡΡΠΎΠ² ΡΠΎΠ±ΡΡΠΈΠΉ. ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΡΠΈΠ»ΡΡΡΠΎΠ² ΡΠΎΠ±ΡΡΠΈΠΉ ΡΠΎΡΡΡΠΈΡ ΠΈΠ· Π΄Π²ΡΡ ΡΡΠ°ΠΏΠΎΠ²:
1. ΠΠ°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠΉΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡβΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΡΠΈΠΊ Ρ ΡΠ΅Π»Π΅Π²ΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ installEventFilter() Π΄Π»Ρ ΡΠ΅Π»Π΅Π²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
2. ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΡΠΎΠ±ΡΡΠΈΠΉ ΡΠ΅Π»Π΅Π²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π² ΡΡΠ½ΠΊΡΠΈΠΈ eventFilter() ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΡΠΈΠΊΠ°.
Π Π΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ CustomerInfoDialog:
01 CustomerInfoDialog::CustomerInfoDialog(QWidget *parent)
02 : QDialog(parent)
03 {
04 firstNameEdit->installEventFilter(this);
05 lastNameEdit->installEventFilter(this);
06 cityEdit->installEventFilter(this);
07 phoneNumberEdit->installEvehtFilter(this);
08 }
ΠΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ ΡΠΈΠ»ΡΡΡΠ° ΡΠΎΠ±ΡΡΠΈΡ ΡΠ΅ ΠΈΠ· Π½ΠΈΡ , ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΡΡΠ»Π°ΡΡΡΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°ΠΌ firstNameEdit, lastNameEdit, cityEdit ΠΈ phoneNumberEdit, ΡΠ½Π°ΡΠ°Π»Π° Π±ΡΠ΄ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ eventFilter() Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° CustomerInfoDialog ΠΈ Π»ΠΈΡΡ Π·Π°ΡΠ΅ΠΌ Π΄ΠΎΠΉΠ΄ΡΡ ΠΏΠΎ ΡΠ²ΠΎΠ΅ΠΌΡ ΠΏΡΡΠΌΠΎΠΌΡ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ. (ΠΡΠ»ΠΈ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΈΠ»ΡΡΡΠΎΠ² ΡΠΎΠ±ΡΡΠΈΠΉ, ΠΎΠ½ΠΈ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΠΏΠΎ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ, Π½Π°ΡΠΈΠ½Π°Ρ Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡ ΠΊ ΠΏΠ΅ΡΠ²ΠΎΠΌΡ.)
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ eventFilter(), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΡΠ²Π°Π΅Ρ ΡΠΎΠ±ΡΡΠΈΡ:
01 bool CustomerInfoDialog::eventFilter(QObject *target, QEvent *event)
02 {
03 if (target == firstNameEdit || target == lastNameEdit
04 || target == cityEdit || target == phoneNumberEdit) {
05 if (event->type() == QEvent::KeyPress) {
06 QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
07 if (keyEvent->key() == Qt::Key_Space) {
08 focusNextChild();
09 return true;
10 }
11 }
12 }
13 return QDialog::eventFilter(target, event);
14 }
ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΠΌΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΡΠ΅Π»Π΅Π²ΠΎΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ ΡΡΡΠΎΠΊΠΎΠΉ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ QLineEdit. ΠΡΠ»ΠΈ ΡΠΎΠ±ΡΡΠΈΠ΅ Π²ΡΠ·Π²Π°Π½ΠΎ Π½Π°ΠΆΠ°ΡΠΈΠ΅ΠΌ ΠΊΠ»Π°Π²ΠΈΡΠΈ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ, ΠΌΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΠΌ Π΅Π³ΠΎ ΡΠΈΠΏ Π² QKeyEvent ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, ΠΊΠ°ΠΊΠ°Ρ ΠΊΠ»Π°Π²ΠΈΡΠ° Π½Π°ΠΆΠ°ΡΠ°. ΠΡΠ»ΠΈ Π½Π°ΠΆΠ°ΡΠ° ΠΊΠ»Π°Π²ΠΈΡΠ° ΠΏΡΠΎΠ±Π΅Π»Π° Space, ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ focusNextChild() Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° ΡΠΎΠΊΡΡΠ° Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ Π² ΡΠΎΠΊΡΡΠ½ΠΎΠΉ ΡΠ΅ΠΏΠΎΡΠΊΠ΅ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ true Π΄Π»Ρ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ Qt ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ Π½Π°ΠΌΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΡ. ΠΡΠ»ΠΈ Π±Ρ ΠΌΡ Π²Π΅ΡΠ½ΡΠ»ΠΈ false, Qt ΠΎΡΠΎΡΠ»Π°Π»Π° Π±Ρ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΏΠΎ Π΅Π³ΠΎ ΠΏΡΡΠΌΠΎΠΌΡ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ,ΡΡΠΎ ΠΏΡΠΈΠ²Π΅Π»ΠΎ Π±Ρ ΠΊ Π²ΡΡΠ°Π²ΠΊΠ΅ Π»ΠΈΡΠ½Π΅Π³ΠΎ ΠΏΡΠΎΠ±Π΅Π»Π° Π² ΡΡΡΠΎΠΊΡ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ QLineEdit.
ΠΡΠ»ΠΈ ΡΠ΅Π»Π΅Π²ΡΠΌ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠΌ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ QLineEdit ΠΈΠ»ΠΈ Π΅ΡΠ»ΠΈ ΡΠΎΠ±ΡΡΠΈΠ΅ Π½Π΅ Π²ΡΠ·Π²Π°Π½ΠΎ Π½Π°ΠΆΠ°ΡΠΈΠ΅ΠΌ ΠΊΠ»Π°Π²ΠΈΡΠΈ Space, ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° eventFilter(). Π¦Π΅Π»Π΅Π²ΡΠΌ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠΌ ΠΌΠΎΠ³ Π±Ρ Π±ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ, Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ QDialog ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ. (Π Qt 4.1 ΡΡΠΎΠ³ΠΎ Π½Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Ρ QDialog. ΠΠ΄Π½Π°ΠΊΠΎ Π΄ΡΡΠ³ΠΈΠ΅ ΠΊΠ»Π°ΡΡΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ² Π² Qt, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ QScrollArea, ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΡΡ ΠΏΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ²ΠΎΠΈ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠ΅ Π²ΠΈΠ΄ΠΆΠ΅ΡΡ.)
Qt ΠΏΡΠ΅Π΄ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ ΠΏΡΡΡ ΡΡΠΎΠ²Π½Π΅ΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ:
1. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΎΠ±ΡΡΠΈΠΉ.
ΠΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΊΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΡΠΎΠ±ΡΡΠΈΠΉ, ΠΊΠ°ΠΊ mousePressEvent(), keyPressEvent() ΠΈ paintEvent(), ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΎΡΠ΅Π½Ρ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ. ΠΡ ΡΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² ΡΠ°ΠΊΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ.
2. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ QObject::event().
ΠΡΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ event() ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΠΎΠ±ΡΡΠΈΡ Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π΄ΠΎΠΉΠ΄ΡΡ Π΄ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΡΠΎΠ±ΡΡΠΈΠΉ. ΠΡΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠΎΡ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ½ΡΡΠΎΠ³ΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΊΠ»Π°Π²ΠΈΡΠΈ ΡΠ°Π±ΡΠ»ΡΡΠΈΠΈ Tab, ΡΡΠΎ Π±ΡΠ»ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΡΠ°Π½Π΅Π΅. ΠΠ½ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ΅Π΄ΠΊΠΈΡ ΡΠΎΠ±ΡΡΠΈΠΉ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ Π½Π΅ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, QEvent::HoverEnter). ΠΡΠΈ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ event() Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° event() Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ΅Ρ ΡΠΎΠ±ΡΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΡΠ°ΠΌΠΈ Π½Π΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌ.