/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
* Qwt Widget Library
* Copyright (C) 1997 Josef Wilgen
* Copyright (C) 2002 Uwe Rathmann
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the Qwt License, Version 1.0
*****************************************************************************/
#include "qwt_symbol.h"
#include "qwt_painter.h"
#include "qwt_graphic.h"
#include <qapplication.h>
#include <qpainter.h>
#include <qpainterpath.h>
#include <qpixmap.h>
#include <qpaintengine.h>
#include <qmath.h>
#ifndef QWT_NO_SVG
#include <qsvgrenderer.h>
#endif
namespace QwtTriangle
{
enum Type
{
Left,
Right,
Up,
Down
};
}
static QwtGraphic qwtPathGraphic( const QPainterPath &path,
const QPen &pen, const QBrush& brush )
{
QwtGraphic graphic;
graphic.setRenderHint( QwtGraphic::RenderPensUnscaled );
QPainter painter( &graphic );
painter.setPen( pen );
painter.setBrush( brush );
painter.drawPath( path );
painter.end();
return graphic;
}
static inline QRectF qwtScaledBoundingRect(
const QwtGraphic &graphic, const QSizeF size )
{
QSizeF scaledSize = size;
if ( scaledSize.isEmpty() )
scaledSize = graphic.defaultSize();
const QSizeF sz = graphic.controlPointRect().size();
double sx = 1.0;
if ( sz.width() > 0.0 )
sx = scaledSize.width() / sz.width();
double sy = 1.0;
if ( sz.height() > 0.0 )
sy = scaledSize.height() / sz.height();
return graphic.scaledBoundingRect( sx, sy );
}
static inline void qwtDrawPixmapSymbols( QPainter *painter,
const QPointF *points, int numPoints, const QwtSymbol &symbol )
{
QSize size = symbol.size();
if ( size.isEmpty() )
size = symbol.pixmap().size();
const QTransform transform = painter->transform();
if ( transform.isScaling() )
{
const QRect r( 0, 0, size.width(), size.height() );
size = transform.mapRect( r ).size();
}
QPixmap pm = symbol.pixmap();
if ( pm.size() != size )
pm = pm.scaled( size );
QPointF pinPoint( 0.5 * size.width(), 0.5 * size.height() );
if ( symbol.isPinPointEnabled() )
pinPoint = symbol.pinPoint();
painter->resetTransform();
for ( int i = 0; i < numPoints; i++ )
{
const QPointF pos = transform.map( points[i] ) - pinPoint;
QwtPainter::drawPixmap( painter,
QRect( pos.toPoint(), pm.size() ), pm );
}
}
#ifndef QWT_NO_SVG
static inline void qwtDrawSvgSymbols( QPainter *painter,
const QPointF *points, int numPoints,
QSvgRenderer *renderer, const QwtSymbol &symbol )
{
if ( renderer == NULL || !renderer->isValid() )
return;
const QRectF viewBox = renderer->viewBoxF();
if ( viewBox.isEmpty() )
return;
QSizeF sz = symbol.size();
if ( !sz.isValid() )
sz = viewBox.size();
const double sx = sz.width() / viewBox.width();
const double sy = sz.height() / viewBox.height();
QPointF pinPoint = viewBox.center();
if ( symbol.isPinPointEnabled() )
pinPoint = symbol.pinPoint();
const double dx = sx * ( pinPoint.x() - viewBox.left() );
const double dy = sy * ( pinPoint.y() - viewBox.top() );
for ( int i = 0; i < numPoints; i++ )
{
const double x = points[i].x() - dx;
const double y = points[i].y() - dy;
renderer->render( painter,
QRectF( x, y, sz.width(), sz.height() ) );
}
}
#endif
static inline void qwtDrawGraphicSymbols( QPainter *painter,
const QPointF *points, int numPoints, const QwtGraphic &graphic,
const QwtSymbol &symbol )
{
const QRectF pointRect = graphic.controlPointRect();
if ( pointRect.isEmpty() )
return;
double sx = 1.0;
double sy = 1.0;
const QSize sz = symbol.size();
if ( sz.isValid() )
{
sx = sz.width() / pointRect.width();
sy = sz.height() / pointRect.height();
}
QPointF pinPoint = pointRect.center();
if ( symbol.isPinPointEnabled() )
pinPoint = symbol.pinPoint();
const QTransform transform = painter->transform();
for ( int i = 0; i < numPoints; i++ )
{
QTransform tr = transform;
tr.translate( points[i].x(), points[i].y() );
tr.scale( sx, sy );
tr.translate( -pinPoint.x(), -pinPoint.y() );
painter->setTransform( tr );
graphic.render( painter );
}
painter->setTransform( transform );
}
static inline void qwtDrawEllipseSymbols( QPainter *painter,
const QPointF *points, int numPoints, const QwtSymbol &symbol )
{
painter->setBrush( symbol.brush() );
painter->setPen( symbol.pen() );
const QSize size = symbol.size();
if ( QwtPainter::roundingAlignment( painter ) )
{
const int sw = size.width();
const int sh = size.height();
const int sw2 = size.width() / 2;
const int sh2 = size.height() / 2;
for ( int i = 0; i < numPoints; i++ )
{
const int x = qRound( points[i].x() );
const int y = qRound( points[i].y() );
const QRectF r( x - sw2, y - sh2, sw, sh );
QwtPainter::drawEllipse( painter, r );
}
}
else
{
const double sw = size.width();
const double sh = size.height();
const double sw2 = 0.5 * size.width();
const double sh2 = 0.5 * size.height();
for ( int i = 0; i < numPoints; i++ )
{
const double x = points[i].x();
const double y = points[i].y();
const QRectF r( x - sw2, y - sh2, sw, sh );
QwtPainter::drawEllipse( painter, r );
}
}
}
static inline void qwtDrawRectSymbols( QPainter *painter,
const QPointF *points, int numPoints, const QwtSymbol &symbol )
{
const QSize size = symbol.size();
QPen pen = symbol.pen();
pen.setJoinStyle( Qt::MiterJoin );
painter->setPen( pen );
painter->setBrush( symbol.brush() );
painter->setRenderHint( QPainter::Antialiasing, false );
if ( QwtPainter::roundingAlignment( painter ) )
{
const int sw = size.width();
const int sh = size.height();
const int sw2 = size.width() / 2;
const int sh2 = size.height() / 2;
for ( int i = 0; i < numPoints; i++ )
{
const int x = qRound( points[i].x() );
const int y = qRound( points[i].y() );
const QRect r( x - sw2, y - sh2, sw, sh );
QwtPainter::drawRect( painter, r );
}
}
else
{
const double sw = size.width();
const double sh = size.height();
const double sw2 = 0.5 * size.width();
const double sh2 = 0.5 * size.height();
for ( int i = 0; i < numPoints; i++ )
{
const double x = points[i].x();
const double y = points[i].y();
const QRectF r( x - sw2, y - sh2, sw, sh );
QwtPainter::drawRect( painter, r );
}
}
}
static inline void qwtDrawDiamondSymbols( QPainter *painter,
const QPointF *points, int numPoints, const QwtSymbol &symbol )
{
const QSize size = symbol.size();
QPen pen = symbol.pen();
pen.setJoinStyle( Qt::MiterJoin );
painter->setPen( pen );
painter->setBrush( symbol.brush() );
if ( QwtPainter::roundingAlignment( painter ) )
{
for ( int i = 0; i < numPoints; i++ )
{
const int x = qRound( points[i].x() );
const int y = qRound( points[i].y() );
const int x1 = x - size.width() / 2;
const int y1 = y - size.height(
没有合适的资源?快使用搜索试试~ 我知道了~
QWT-6.1.4 编译好的 Qt5.12.3 MSVC2015_64 版本
共205个文件
h:98个
cpp:95个
dll:4个
3星 · 超过75%的资源 需积分: 40 49 下载量 166 浏览量
2019-04-29
16:33:44
上传
评论 1
收藏 4.01MB ZIP 举报
温馨提示
Qt 5.12.3 编译的 MSVC2015 64位版本的 QWT 6.1.4 ,包括 *.h *.lib *.dll , Designer msvc2015_64 以及 Creator 可正常使用。
资源推荐
资源详情
资源评论
收起资源包目录
QWT-6.1.4 编译好的 Qt5.12.3 MSVC2015_64 版本 (205个子文件)
qwt_symbol.cpp 45KB
qwt_plot_layout.cpp 44KB
qwt_picker.cpp 40KB
qwt_painter.cpp 37KB
qwt_date_scale_engine.cpp 36KB
qwt_plot_curve.cpp 32KB
qwt_plot.cpp 32KB
qwt_wheel.cpp 31KB
qwt_plot_renderer.cpp 29KB
qwt_scale_engine.cpp 29KB
qwt_plot_canvas.cpp 29KB
qwt_graphic.cpp 26KB
qwt_plot_rasteritem.cpp 26KB
qwt_slider.cpp 24KB
qwt_thermo.cpp 24KB
qwt_scale_widget.cpp 23KB
qwt_scale_draw.cpp 23KB
qwt_legend.cpp 22KB
qwt_knob.cpp 21KB
qwt_plot_legenditem.cpp 20KB
qwt_dial.cpp 20KB
qwt_date.cpp 19KB
qwt_point_mapper.cpp 19KB
qwt_plot_multi_barchart.cpp 19KB
qwt_abstract_slider.cpp 19KB
qwt_plot_tradingcurve.cpp 19KB
qwt_plot_histogram.cpp 18KB
qwt_plot_axis.cpp 18KB
qwt_counter.cpp 18KB
qwt_plot_spectrogram.cpp 18KB
qwt_plot_zoomer.cpp 17KB
qwt_plot_item.cpp 16KB
qwt_text.cpp 16KB
qwt_plot_intervalcurve.cpp 16KB
qwt_plot_rescaler.cpp 16KB
qwt_plot_marker.cpp 15KB
qwt_dyngrid_layout.cpp 15KB
qwt_picker_machine.cpp 14KB
qwt_null_paintdevice.cpp 14KB
qwt_clipper.cpp 13KB
qwt_panner.cpp 13KB
qwt_magnifier.cpp 12KB
qwt_raster_data.cpp 12KB
qwt_color_map.cpp 12KB
qwt_plot_scaleitem.cpp 12KB
qwt_plot_barchart.cpp 12KB
qwt_plot_shapeitem.cpp 12KB
qwt_dial_needle.cpp 11KB
qwt_abstract_scale.cpp 11KB
qwt_curve_fitter.cpp 11KB
qwt_plot_grid.cpp 10KB
qwt_abstract_scale_draw.cpp 10KB
qwt_plot_abstract_barchart.cpp 9KB
qwt_plot_picker.cpp 9KB
qwt_legend_label.cpp 9KB
qwt_series_data.cpp 9KB
qwt_text_engine.cpp 9KB
qwt_widget_overlay.cpp 9KB
qwt_spline.cpp 9KB
qwt_interval.cpp 9KB
qwt_plot_directpainter.cpp 9KB
qwt_arrow_button.cpp 8KB
qwt_round_scale_draw.cpp 8KB
qwt_system_clock.cpp 8KB
qwt_plot_glcanvas.cpp 8KB
qwt_interval_symbol.cpp 8KB
qwt_matrix_raster_data.cpp 8KB
qwt_plot_spectrocurve.cpp 8KB
qwt_scale_div.cpp 8KB
qwt_compass.cpp 8KB
qwt_plot_panner.cpp 7KB
qwt_plot_zoneitem.cpp 7KB
qwt_date_scale_draw.cpp 7KB
qwt_text_label.cpp 7KB
qwt_point_data.cpp 7KB
qwt_column_symbol.cpp 7KB
qwt_event_pattern.cpp 7KB
qwt_compass_rose.cpp 7KB
qwt_plot_textlabel.cpp 6KB
qwt_analog_clock.cpp 6KB
qwt_painter_command.cpp 6KB
qwt_scale_map.cpp 6KB
qwt_plot_svgitem.cpp 5KB
qwt_plot_dict.cpp 5KB
qwt_plot_magnifier.cpp 4KB
qwt_transform.cpp 4KB
qwt_point_polar.cpp 3KB
qwt_legend_data.cpp 3KB
qwt_plot_seriesitem.cpp 3KB
qwt_sampling_thread.cpp 2KB
qwt_math.cpp 2KB
qwt_pixel_matrix.cpp 1KB
qwt_plot_xml.cpp 1KB
qwt_abstract_legend.cpp 967B
qwt_point_3d.cpp 667B
qwtd.dll 2.09MB
qwt.dll 1.04MB
qwt_designer_plugin.dll 390KB
qwt_designer_plugin.dll 328KB
qwt_plot_curve.h 10KB
共 205 条
- 1
- 2
- 3
资源评论
- uBayMaxH2020-07-14感觉没有多大用处,最好还是自己下载源码重新编译一次
robotics5
- 粉丝: 35
- 资源: 113
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功