051 void Plotter::setCurveData(int id, const QVector<QPointF> &data)
052 {
053 curveMap[id] = data;
054 refreshPixmap();
055 }
Π€ΡΠ½ΠΊΡΠΈΡ setCurveData() ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ Π΄Π»Ρ ΠΊΡΠΈΠ²ΠΎΠΉ Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ. ΠΡΠ»ΠΈ Π² curveMap ΡΠΆΠ΅ ΠΈΠΌΠ΅Π΅ΡΡΡ ΠΊΡΠΈΠ²Π°Ρ Ρ ΡΠ°ΠΊΠΈΠΌ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ, Π΅Π΅ Π΄Π°Π½Π½ΡΠ΅ Π·Π°ΠΌΠ΅Π½ΡΡΡΡΡ Π½ΠΎΠ²ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ; Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ Π½ΠΎΠ²Π°Ρ ΠΊΡΠΈΠ²Π°Ρ. ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°ΡβΡΠ»Π΅Π½ curveMap ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ QMap<int, QVector<QPointF> >.
056 void Plotter::clearCurve(int id)
057 {
058 curveMap.remove(id);
059 refreshPixmap();
060 }
Π€ΡΠ½ΠΊΡΠΈΡ clearCurve() ΡΠ΄Π°Π»ΡΠ΅Ρ Π·Π°Π΄Π°Π½Π½ΡΡ ΠΊΡΠΈΠ²ΡΡ ΠΈΠ· curveMap.
061 QSize Plotter::minimumSizeHint() const
062 {
063 return QSize(6 * Margin, 4 * Margin);
064 }
Π€ΡΠ½ΠΊΡΠΈΡ minimumSizeHint() Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ sizeHint(); Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΡ sizeHint() ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°, minimumSizeHint() Π·Π°Π΄Π°Π΅Ρ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΡΠΉ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°. ΠΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΡΠ°Π½Π΅Ρ Π·Π°Π΄Π°Π²Π°ΡΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΡ Π½ΠΈΠΆΠ΅ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°.
ΠΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 300 Γ 200 (ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Margin ΡΠ°Π²Π΅Π½ 50) Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ ΠΎΠΊΠ°ΠΉΠΌΠ»ΡΡΡΡΡ ΠΊΡΠΎΠΌΠΊΡ ΠΏΠΎ Π²ΡΠ΅ΠΌ ΡΠ΅ΡΡΡΠ΅ΠΌ ΡΡΠΎΡΠΎΠ½Π°ΠΌ ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π΄Π»Ρ ΡΠ°ΠΌΠΎΠ³ΠΎ Π³ΡΠ°ΡΠΈΠΊΠ°. ΠΡΠΈ ΠΌΠ΅Π½ΡΡΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠ°Ρ ΡΡΠΈΡΠ°Π΅ΡΡΡ, ΡΡΠΎ Π³ΡΠ°ΡΠΈΠΊ Π±ΡΠ΄Π΅Ρ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ°Π» ΠΈ Π±Π΅ΡΠΏΠΎΠ»Π΅Π·Π΅Π½.
065 QSize Plotter::sizeHint() const
066 {
067 return QSize(12 * Margin, 8 * Margin);
068 }
Π ΡΡΠ½ΠΊΡΠΈΠΈ sizeHint() ΠΌΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ Β«ΠΈΠ΄Π΅Π°Π»ΡΠ½ΡΠΉΒ» ΡΠ°Π·ΠΌΠ΅Ρ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ Margin, ΠΏΡΠΈΡΠ΅ΠΌ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΡΠΉ ΠΈ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΡΡΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΡΠΎΡΡΠ°Π²Π»ΡΡΡ ΡΡ ΠΆΠ΅ ΡΠ°ΠΌΡΡ ΠΏΡΠΈΡΡΠ½ΡΡ Π΄Π»Ρ Π³Π»Π°Π·Π° ΠΏΡΠΎΠΏΠΎΡΡΠΈΡ 3:2, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Π΄Π»Ρ minimumSizeHint().
ΠΡ Π·Π°Π²Π΅ΡΡΠ°Π΅ΠΌ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠΊΡΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΡΠ»ΠΎΡΠΎΠ² ΠΏΠΎΡΡΡΠΎΠΈΡΠ΅Π»Ρ Π³ΡΠ°ΡΠΈΠΊΠΎΠ² Plotter. Π’Π΅ΠΏΠ΅ΡΡ Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π·Π°ΡΠΈΡΠ΅Π½Π½ΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ.
069 void Plotter::paintEvent(QPaintEvent * /* event */)
070 {
071 QStylePainter painter(this);
072 painter.drawPixmap(0, 0, pixmap);
073 if (rubberBandIsShown) {
074 painter.setPen(palette().light().color());
075 painter.drawRect(rubberBandRect.normalized()
076 .adjusted(0, 0, -1, -1));
077 }
078 if (hasFocus()) {
079 QStyleOptionFocusRect option;
080 option.initFrom(this);
081 option.backgroundColor = palette().dark().color();
082 painter.drawPrimitive(QStyle::PE_FrameFocusRect, option);
083 }
084 }
ΠΠ±ΡΡΠ½ΠΎ Π²ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΠΎ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ paintEvent(). ΠΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΡΡ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° ΡΠΆΠ΅ Π½Π°ΡΠΈΡΠΎΠ²Π°Π½Π° ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ refreshPixmap(), ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ Π²Π΅ΡΡ Π³ΡΠ°ΡΠΈΠΊ, ΠΏΡΠΎΡΡΠΎ ΠΊΠΎΠΏΠΈΡΡΡ ΠΏΠΈΠΊΡΠ΅Π»ΡΠ½ΡΡ ΠΊΠ°ΡΡΡ Π² Π²ΠΈΠ΄ΠΆΠ΅Ρ Π² ΠΏΠΎΠ·ΠΈΡΠΈΡ (0, 0).
ΠΡΠ»ΠΈ ΡΠ΅Π·ΠΈΠ½ΠΎΠ²Π°Ρ Π»Π΅Π½ΡΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΠΉ, ΠΌΡ ΡΠΈΡΡΠ΅ΠΌ Π΅Π΅ ΠΏΠΎΠ²Π΅ΡΡ Π³ΡΠ°ΡΠΈΠΊΠ°. ΠΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΠ²Π΅ΡΠ»ΡΠΉ (Β«lightΒ») ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΈΠ· ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΠ²Π΅ΡΠΎΠ²ΠΎΠΉ Π³ΡΡΠΏΠΏΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ²Π΅ΡΠ° ΠΏΠ΅ΡΠ° Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Ρ ΠΎΡΠΎΡΠ΅Π³ΠΎ ΠΊΠΎΠ½ΡΡΠ°ΡΡΠ° Ρ ΡΠ΅ΠΌΠ½ΡΠΌ (Β«darkΒ») ΡΠΎΠ½ΠΎΠΌ. Π‘Π»Π΅Π΄ΡΠ΅Ρ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΠΌΡ ΡΠΈΡΡΠ΅ΠΌ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π½Π° Π²ΠΈΠ΄ΠΆΠ΅ΡΠ΅, ΠΎΡΡΠ°Π²Π»ΡΡ Π½Π΅ΡΡΠΎΠ½ΡΡΡΠΌ Π²Π½Π΅ΡΠΊΡΠ°Π½Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΠΈΠΊΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΊΠ°ΡΡΠ΅. ΠΡΠ·ΠΎΠ² QRect::normalized() Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ Π½Π°Π»ΠΈΡΠΈΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΠΈΡΠΈΠ½Ρ ΠΈ Π²ΡΡΠΎΡΡ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° ΡΠ΅Π·ΠΈΠ½ΠΎΠ²ΠΎΠΉ Π»Π΅Π½ΡΡ (Π²ΡΠΏΠΎΠ»Π½ΡΡ ΠΎΠ±ΠΌΠ΅Π½ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ), Π° Π²ΡΠ·ΠΎΠ² adjusted() ΡΠΌΠ΅Π½ΡΡΠ°Π΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΏΠΈΠΊΡΠ΅Π»Ρ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ Π²ΡΠ²Π΅ΡΡΠΈ Π½Π° ΡΠΊΡΠ°Π½ Π΅Π³ΠΎ ΠΊΠΎΠ½ΡΡΡ ΡΠΈΡΠΈΠ½ΠΎΠΉ Π² ΠΎΠ΄ΠΈΠ½ ΠΏΠΈΠΊΡΠ΅Π»Ρ.
ΠΡΠ»ΠΈ Plotter ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠΎΠΊΡΡ, Π²ΡΠ²ΠΎΠ΄ ΡΠΎΠΊΡΡΠ½ΠΎΠ³ΠΎ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ drawPrimitive(), Π·Π°Π΄Π°ΡΡΠ΅ΠΉ ΡΡΠΈΠ»Ρ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°, Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ΠΉ QStyle::PE_FrameFocusRect Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° QStyleOptionFocusRect Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²ΡΠΎΡΠΎΠ³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°. ΠΠΏΡΠΈΠΈ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΠΊΡΡΠ½ΠΎΠ³ΠΎ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° Π½Π°ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΎΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° Plotter (ΠΏΡΡΠ΅ΠΌ Π²ΡΠ·ΠΎΠ²Π° initFrom()). Π¦Π²Π΅Ρ ΡΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Π΄Π°Π²Π°ΡΡΡΡ ΡΠ²Π½ΠΎ.
ΠΡΠ»ΠΈ ΠΏΡΠΈ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΠΊΡΡΠΈΠΉ ΡΡΠΈΠ»Ρ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π»ΠΈΠ±ΠΎ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ QStyle, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ
style()->drawPrimitive(QStyle::PE_FrameFocusRect, &option, &painter, this);
Π»ΠΈΠ±ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ QStylePainter Π²ΠΌΠ΅ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ QPainter (ΠΊΠ°ΠΊ ΠΌΡ ΡΡΠΎ Π΄Π΅Π»Π°Π»ΠΈ Π² Plotter), ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡΠ΄ΠΎΠ±Π½ΡΠΌ.
Π€ΡΠ½ΠΊΡΠΈΡ QWidget::style() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΠΈΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ Π΄Π»Ρ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°. Π Qt ΡΡΠΈΠ»Ρ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠΎΠΌ QStyle. ΠΡΡΡΠΎΠ΅Π½Π½ΡΠΌΠΈ ΡΠ²Π»ΡΡΡΡΡ ΡΡΠΈΠ»ΠΈ QWindowsStyle, QWindowsXPStyle, QMotifStyle, QCDEStyle, QMacStyle ΠΈ OPlastiqueStyle. ΠΡΠ΅ ΡΡΠΈ ΡΡΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠ»Π°ΡΡΠ° QStyle, ΡΡΠΎΠ±Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ΅ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΡΡΠΈΠ»Π΅ ΠΈΠΌΠΈΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ. Π€ΡΠ½ΠΊΡΠΈΡ drawPrimitive() ΠΊΠ»Π°ΡΡΠ° QStylePainter Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΊΠ»Π°ΡΡΠ° QStyle Ρ ΡΠ΅ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΊΠΈΡ Β«ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΎΠ²Β», ΠΊΠ°ΠΊ ΠΏΠ°Π½Π΅Π»ΠΈ, ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΈ ΡΠΎΠΊΡΡΠ½ΡΠ΅ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΈ. ΠΠ±ΡΡΠ½ΠΎ Π²ΡΠ΅ Π²ΠΈΠ΄ΠΆΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΡΠΈΠ»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (QApplication::style()), Π½ΠΎ Π² Π»ΡΠ±ΠΎΠΌ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ΅ ΡΡΠΈΠ»Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ QWidget::setStyle().
ΠΡΡΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠ° QStyle ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΡΡΠΈΠ»Ρ. ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°ΡΡ Ρ ΡΠ΅Π»ΡΡ ΠΏΡΠΈΠ΄Π°Π½ΠΈΡ ΠΎΡΠ»ΠΈΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΡΠΈΠ»Π΅Π²ΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΊΠ°ΠΊΠΎΠΌΡ-ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π³ΡΡΠΏΠΏΠ΅ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π₯ΠΎΡΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ Π² ΡΠ΅Π»ΠΎΠΌ ΠΏΡΠΈΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ Β«ΡΠΎΠ΄Π½ΠΎΠ³ΠΎΒ» ΡΡΠΈΠ»Ρ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ, Qt ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π³ΠΈΠ±ΠΊΠΈΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° ΠΏΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΡΠΈΠ»Π΅ΠΌ ΡΠ΅ΠΌ, Ρ ΠΊΠΎΠ³ΠΎ Π±ΠΎΠ»ΡΡΠ°Ρ ΡΠ°Π½ΡΠ°Π·ΠΈΡ.
ΠΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ Π² Qt Π²ΠΈΠ΄ΠΆΠ΅ΡΡ ΠΏΡΠΈ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ°ΠΌΠΈΡ ΡΠ΅Π±Ρ ΠΏΠΎΡΡΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π·Π°Π²ΠΈΡΡΡ ΠΎΡ QStyle. ΠΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ½ΠΈ Π²ΡΠ³Π»ΡΠ΄ΡΡ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ Π½Π° Π²ΡΠ΅Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°Ρ , ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΡ Qt. ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ Π²ΠΈΠ΄ΠΆΠ΅ΡΡ ΠΌΠΎΠ³ΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡΡΡ ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΠΊ ΡΡΠΈΠ»Ρ Π»ΠΈΠ±ΠΎ ΠΏΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ QStyle (ΡΠ΅ΡΠ΅Π· QStylePainter) ΠΏΡΠΈ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ°ΠΌΠΈΡ ΡΠ΅Π±Ρ, Π»ΠΈΠ±ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ Π²ΠΈΠ΄ΠΆΠ΅ΡΡ Qt Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ . Π Plotter ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΎΠ±Π° ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°: ΡΠΎΠΊΡΡΠ½ΡΠΉ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ ΡΠΈΡΡΠ΅ΡΡΡ Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ QStyle, Π° ΠΊΠ½ΠΎΠΏΠΊΠΈ Zoom In ΠΈ Zoom Out ΡΠ²Π»ΡΡΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΌΠΈ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°ΠΌΠΈ Qt.
085 void Plotter::resizeEvent(QResizeEvent * /* event */ )
086 {
087 int x= width() - (zoomInButton->width()
088 + zoomOutButton->width() + 10);
089 zoomInButton->move(x, 5);
090 zoomOutButton->move(x + zoomInButton->width() + 5, 5);
091 refreshPixmap();
092 }
ΠΡΠΈ Π²ΡΡΠΊΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° Plotter Qt Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠΎΠ±ΡΡΠΈΠ΅ Β«ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ°Β». ΠΠ΄Π΅ΡΡ ΠΌΡ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ resizeEvent() Π΄Π»Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ Zoom In ΠΈ Zoom Out Π² Π²Π΅ΡΡ Π½Π΅ΠΌ ΠΏΡΠ°Π²ΠΎΠΌ ΡΠ³Π»Ρ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° Plotter.
ΠΡ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ Zoom In ΠΈ Zoom Out ΡΡΠ΄ΠΎΠΌ, ΠΎΡΠ΄Π΅Π»ΡΡ ΠΈΡ 5-ΠΏΠΈΠΊΡΠ΅Π»ΡΠ½ΡΠΌ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΊΠΎΠΌ ΠΎΡ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΠΈ ΠΏΡΠ°Π²ΠΎΠ³ΠΎ ΠΊΡΠ°Π΅Π² ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°.
ΠΡΠ»ΠΈ Π±Ρ Π½Π°ΠΌ Π·Π°Ρ ΠΎΡΠ΅Π»ΠΎΡΡ ΠΎΡΡΠ°Π²ΠΈΡΡ ΡΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π² Π²Π΅ΡΡ Π½Π΅ΠΌ Π»Π΅Π²ΠΎΠΌ ΡΠ³Π»Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠΌΠ΅Π΅Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ (0, 0), ΠΌΡ Π±Ρ ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠ»ΠΈ ΠΈΡ ΡΡΠ΄Π° Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ Plotter. ΠΠΎ ΠΌΡ Ρ ΠΎΡΠΈΠΌ, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΈ Π½Π°Ρ ΠΎΠ΄ΠΈΠ»ΠΈΡΡ Π² Π²Π΅ΡΡ Π½Π΅ΠΌ ΠΏΡΠ°Π²ΠΎΠΌ ΡΠ³Π»Ρ, ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π·Π°Π²ΠΈΡΡΡ ΠΎΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°. ΠΠΎ ΡΡΠΎΠΉ ΠΏΡΠΈΡΠΈΠ½Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΡ resizeEvent() ΠΈ Π² Π½Π΅ΠΉ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΎΠΊ.
ΠΡ Π½Π΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π»ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊΠΈΡ -Π»ΠΈΠ±ΠΎ ΠΊΠ½ΠΎΠΏΠΎΠΊ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ Plotter. ΠΡΠΎ ΡΠ΄Π΅Π»Π°Π½ΠΎ ΠΈΠ·-Π·Π° ΡΠΎΠ³ΠΎ, ΡΡΠΎ Qt Π²ΡΠ΅Π³Π΄Π° Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π΄ΠΎ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ Π½Π° ΡΠΊΡΠ°Π½Π΅ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ resizeEvent() ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ² Β«Π²ΡΡΡΠ½ΡΡΒ» ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, QGridLayout). ΠΡΠΈ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠΎΠ² ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ ΡΡΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠΆΠ½Π΅Π΅ ΠΈ ΡΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π» Π±Ρ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ²; Ρ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΡΡΠΎ Π΄Π°Π»ΠΎ Π±Ρ ΡΠ»Π΅Π³Π°Π½ΡΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ ΡΠΏΡΠ°Π²Π° Π½Π°Π»Π΅Π²ΠΎ, ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π»Ρ ΡΠ°ΠΊΠΈΡ ΡΠ·ΡΠΊΠΎΠ², ΠΊΠ°ΠΊ Π°ΡΠ°Π±ΡΠΊΠΈΠΉ ΠΈ Π΅Π²ΡΠ΅ΠΉΡΠΊΠΈΠΉ.
Π ΠΊΠΎΠ½ΡΠ΅ ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ refreshPixmap() Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΠΈΠΊΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΊΠ°ΡΡΡ Ρ Π½ΠΎΠ²ΡΠΌ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ.
093 void Plotter::mousePressEvent(QMouseEvent *event)
094 {
095 QRect rect(Margin, Margin,
096 width() - 2 * Margin, height() - 2 * Margin);
097 if (event->button() == Qt::LeftButton) {
098 if (rect.contains(event->pos())) {
099 rubberBandIsShown = true;
100 rubberBandRect.setTopLeft(event->pos());
101 rubberBandRect.setBottomRight(event->pos());
102 updateRubberBandRegion();
103 setCursor(Qt::CrossCursor);
104 }
105 }
106 }
ΠΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ Π»Π΅Π²ΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ ΠΌΡΡΠΊΠΈ, ΠΌΡ Π½Π°ΡΠΈΠ½Π°Π΅ΠΌ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ Π½Π° ΡΠΊΡΠ°Π½Π΅ ΡΠ΅Π·ΠΈΠ½ΠΎΠ²ΡΡ Π»Π΅Π½ΡΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ»Π°ΠΆΠΎΠΊ rubberBandIsShown Π½Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ true, ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡβΡΠ»Π΅Π½ rubberBandRect Π½Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΊΡΡΡΠΎΡΠ° ΠΌΡΡΠΊΠΈ, ΠΏΠΎΡΡΠ°Π²ΠΈΡΡ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΠΎΠ±ΡΡΠΈΠ΅ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ Π²ΡΡΠ΅ΡΡΠΈΠ²Π°Π½ΠΈΡ ΡΠ΅Π·ΠΈΠ½ΠΎΠ²ΠΎΠΉ Π»Π΅Π½ΡΡ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΡΡΡΠΎΡΠ° ΠΌΡΡΠΊΠΈ Π½Π° ΠΏΠ΅ΡΠ΅ΠΊΡΠ΅ΡΡΠΈΠ΅.
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ rubberBandRect ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ QRect. ΠΠ±ΡΠ΅ΠΊΡ QRect ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π΄Π°Π²Π°ΡΡΡΡ Π»ΠΈΠ±ΠΎ ΡΠ΅ΡΡΡΡΠΌΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ (x, Ρ, w, h), Π³Π΄Π΅ (x, Ρ) ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΠ΅ΠΉ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ Π»Π΅Π²ΠΎΠ³ΠΎ ΡΠ³Π»Π° ΠΈ w Γ h ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠ°Π·ΠΌΠ΅ΡΡ ΡΠ΅ΡΡΡΠ΅Ρ ΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°, Π»ΠΈΠ±ΠΎ ΠΏΠ°ΡΠΎΠΉ ΡΠΎΡΠ΅ΠΊ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ Π»Π΅Π²ΠΎΠ³ΠΎ ΠΈ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ ΠΏΡΠ°Π²ΠΎΠ³ΠΎ ΡΠ³Π»ΠΎΠ². ΠΠ΄Π΅ΡΡ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΠΎΡΠΌΠ°Ρ Ρ ΠΏΠ°ΡΠΎΠΉ ΡΠΎΡΠ΅ΠΊ. Π’ΠΎ ΠΌΠ΅ΡΡΠΎ, Π³Π΄Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ°Π· ΡΠ΅Π»ΠΊΠ½ΡΠ» ΠΌΡΡΠΊΠΎΠΉ, ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π²Π΅ΡΡ Π½ΠΈΠΌ Π»Π΅Π²ΡΠΌ ΡΠ³Π»ΠΎΠΌ, Π° ΡΠ΅ΠΊΡΡΠ°Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΊΡΡΡΠΎΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ ΠΏΡΠ°Π²ΠΎΠ³ΠΎ ΡΠ³Π»Π°. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ updateRubberBandRegion() Π΄Π»Ρ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΠΈ (Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ) ΠΎΠ±Π»Π°ΡΡΠΈ, ΠΏΠΎΠΊΡΡΠ²Π°Π΅ΠΌΠΎΠΉ ΡΠ΅Π·ΠΈΠ½ΠΎΠ²ΠΎΠΉ Π»Π΅Π½ΡΠΎΠΉ.