表盘 画表盘的指针 * void CircularGauge::paintEvent(QPaintEvent *ev) { ... p.rotate(m_value+135); QPolygon polygon; polygon << QPoint(-extent*0.05, extent*0.05) << QPoint(-extent*0.05, -extent*0.05) << QPoint(extent*0.46, 0); p.setPen(Qt::NoPen); p.setBrush(QColor(255,0,0,120)); p.drawPolygon(polygon); } 加速绘制 paintEvent函数有一个QPaintEvent参数 QPaintEvent有两个方法 QRect rect():返回需要重绘的矩形 QRegion region():返回需要重绘的区域 重绘时,尽量避免在QPaintEvent返回的矩形/区域外绘制复杂图形 * 为表盘添加事件过滤器 按键0时,时油表指向0 * class KeyboardFilter : public QObject ... {bool KeyboardFilter::eventFilter(QObject *o, QEvent *ev) if (ev->type() == QEvent::KeyPress) if (QKeyEvent *ke = static_cast(ev)) if (ke->key() == Qt::Key_0) if (o->metaObject()->indexOfProperty("value") != -1 ) { o->setProperty("value", 0); return true; } return false; } 返回true,停止 对该事件的响应 安装事件过滤器 调用installEventFilter函数 由于该filter对象是应用于属性(property)的,它可以用于任何具有该属性的对象,如QSlider, QDial, QSpinBox等 如果勇于尝试,可以为QApplication添加事件过滤器 * ComposedGauge compg; CircularGauge circg; KeyboardFilter filter; compg.installEventFilter(&filter); circg.installEventFilter(&filter); 课堂小结 * 思考题 * 作业题(工程打包上传至课间区) 时钟设计(表盘、指针) 可选方法: 全部用绘图函数; 贴图; * 预习内容 第5章 QT5主窗体 * 渐变填充 Qt提供了渐变填充的画刷,渐变填充包括两个要素:颜色的变化和路径的变化。 颜色变化可以指定从一种颜色渐变到另外一种颜色。 路径变化指在路径上指定一些点的颜色进行分段渐变。 Qt中,提供了三种渐变填充 线性(QLinearGradient) 圆形(QRadialGradient) 圆锥渐变(QConicalGradient) 所有的类都从QGradient类继承 构造渐变填充的画刷 QBrush b = QBrush( QRadialGradient( ... ) ); * 填充设置 从图形的起点到终点,以从0至1的比例渐变填充 完成0-1范围的填充后,后续颜色铺开的方式可以不同,通过setSpread() 函数来设置 * QGradient::setColorAt( qreal pos, QColor ); QGradient::PadSpread (default) QGradient::RepeatSpread QGradient::ReflectSpread 线性渐变填充 线性渐变填充指定两个控制点,画刷在两个控制点之间进行颜色插值。 通过创建QLinearGradient对象来设置画刷。 QPainter p(this); QLinearGradient g(0, 0, 100, 100); g.setColorAt(0.0, Qt::white); g.setColorAt(1.0, Qt::blue); p.setBrush(g);
qt 混合 绘图_Qt绘图详解课件.ppt
最新推荐文章于 2023-07-09 09:00:00 发布