📄 axbouncer.cpp
字号:
#include <QtGui>#include "axbouncer.h"#include "objectsafetyimpl.h"AxBouncer::AxBouncer(QWidget *parent) : QWidget(parent){ ballColor = Qt::blue; ballSpeed = Normal; ballRadius = 15; myTimerId = 0; x = 20; delta = 2;}void AxBouncer::setColor(const QColor &newColor){ if (newColor != ballColor && requestPropertyChange("color")) { ballColor = newColor; update(); propertyChanged("color"); }}void AxBouncer::setSpeed(SpeedValue newSpeed){ if (newSpeed != ballSpeed && requestPropertyChange("speed")) { ballSpeed = newSpeed; if (isRunning()) { killTimer(myTimerId); myTimerId = startTimer(intervalInMilliseconds()); } propertyChanged("speed"); }}int AxBouncer::intervalInMilliseconds() const{ switch (ballSpeed) { case Slow: return 50; case Fast: return 10; default: return 30; }}void AxBouncer::setRadius(int newRadius){ if (newRadius != ballRadius && requestPropertyChange("radius")) { ballRadius = newRadius; update(); updateGeometry(); propertyChanged("radius"); }}QSize AxBouncer::sizeHint() const{ return QSize(250, 5 * radius());}QAxAggregated *AxBouncer::createAggregate(){ return new ObjectSafetyImpl;}void AxBouncer::start(){ if (!isRunning() && requestPropertyChange("running")) { myTimerId = startTimer(intervalInMilliseconds()); propertyChanged("running"); }}void AxBouncer::stop(){ if (isRunning() && requestPropertyChange("running")) { killTimer(myTimerId); myTimerId = 0; propertyChanged("running"); }}void AxBouncer::paintEvent(QPaintEvent * /* event */){ QPainter painter(this); painter.setPen(ballColor); painter.setBrush(ballColor); painter.drawEllipse(x - radius(), height() / 2 - radius(), 2 * radius(), 2 * radius());}void AxBouncer::timerEvent(QTimerEvent *event){ if (event->timerId() == myTimerId) { if ((delta > 0 && x >= width() - radius()) || (delta < 0 && x <= radius())) { delta = -delta; emit bouncing(); } x += delta; update(); } else { QWidget::timerEvent(event); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -