blob: 2a645d7f23bed90912ea49d5d9a03bf7895d3757 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
The QML painting rate is calculated by first creating a \l{QObject}-derived
class called PaintEventMonitor, which allows its client to provide a
\l{QWidget} to be monitored, and which emits a signal when that widget
is repainted:
\quotefromfile video/snippets/painteventmonitor/painteventmonitor.h
\skipto class PaintEventMonitor
\printuntil targetChanged)
\dots
\skipto protected
\printuntil signals:
\skipto void targetPainted
\printuntil ;
\skipto private
\printuntil };
The signal is generated by installing an event filter on the target \l{QWidget}:
\quotefromfile video/snippets/painteventmonitor/painteventmonitor.cpp
\skipto PaintEventMonitor::eventFilter
\printuntil }
A second class, FrequencyMonitor, is used to turn the stream of targetPainted()
signals into an instantaneous and an averaged frequency:
\quotefromfile video/snippets/frequencymonitor/frequencymonitor.h
\skipto class FrequencyMonitor : public QObject
\printuntil Q_OBJECT
\skipto Q_PROPERTY(qreal instantaneousFrequency
\printuntil averageFrequencyChanged)
\skipto public
\printuntil :
\dots
\skipto static void qmlRegisterType
\printuntil ;
\skipto public slots
\printuntil notify();
\skipto };
\printline };
The FrequencyMonitor class is exposed to QML like this
\quotefromfile video/snippets/frequencymonitor/frequencymonitordeclarative.cpp
\skipto FrequencyMonitor::qmlRegisterType
\printuntil }
and its data is displayed by defining a QML item called FrequencyItem, like this:
\quotefromfile video/snippets/frequencymonitor/qml/frequencymonitor/FrequencyItem.qml
\skipto import FrequencyMonitor
\printuntil id: root
\dots
\skipto function notify
\printuntil id: monitor
\skipto onAverageFrequencyChanged
\printuntil {
\skipto instantaneousFrequencyText
\printuntil /^\}/
The result looks like this:
\image video-qml-paint-rate.png
|