Exemplo n.º 1
0
    MySymbol( QwtSymbol::Style style, const QBrush &brush )
    {
        QPen pen( Qt::black, 0 );
        pen.setJoinStyle( Qt::MiterJoin );
        pen.setCosmetic( true );

        QPainterPath path = createArrow( QSize( 16, 24 ) );

        const QSizeF pathSize = path.boundingRect().size();

        setSize( 0.8 * pathSize.toSize() );

        setPinPoint( QPointF( 0.0, 0.0 ) );

        switch( style )
        {
            case QwtSymbol::Pixmap:
            {
                const QSize sz = size();

                const double ratio = qMin( sz.width() / pathSize.width(),
                    sz.height() / pathSize.height() );

                QTransform transform;
                transform.scale( ratio, ratio );

                path = transform.map( path );

                if ( isPinPointEnabled() )
                {
                    QPointF pos = transform.map( pinPoint() );
                    setPinPoint( pos );
                }

                const QRectF br = path.boundingRect();

                int m = 2 + qCeil( pen.widthF() );

                QPixmap pm( sz + QSize( 2 * m, 2 * m ) );
                pm.fill( Qt::transparent );

                QPainter painter( &pm );
                painter.setRenderHint( QPainter::Antialiasing, true );
                
                painter.setPen( pen ); 
                painter.setBrush( brush );

                painter.translate( m, m );
                painter.translate( -br.left(), br.top() );
                painter.drawPath( path );
                
                setPixmap( pm );
                setSize( pm.size() );
                if ( isPinPointEnabled() )
                    setPinPoint( pinPoint() + QPointF( m, m ) );

                break;
            }
            case QwtSymbol::Graphic:
            {
                QwtGraphic graphic;
                graphic.setRenderHint( QwtGraphic::RenderPensUnscaled );
        
                QPainter painter( &graphic );
                painter.setRenderHint( QPainter::Antialiasing, true );
                painter.setPen( pen ); 
                painter.setBrush( brush );
        
                painter.drawPath( path );
                painter.end();
        
                setGraphic( graphic );
                break;
            }
            case QwtSymbol::SvgDocument:
            {
                QBuffer buf;

                QSvgGenerator generator;
                generator.setOutputDevice( &buf );

                QPainter painter( &generator );
                painter.setRenderHint( QPainter::Antialiasing, true );
                painter.setPen( pen );
                painter.setBrush( brush );

                painter.drawPath( path );
                painter.end();

                setSvgDocument( buf.data() );
                break;
            }
            case QwtSymbol::Path:
            default:
            {
                setPen( pen );
                setBrush( brush );
                setPath( path );
            }
        }

    }
Exemplo n.º 2
0
//--------------------------------------------------------------------------------------------------
/// Internal class to support labels on symbols
//--------------------------------------------------------------------------------------------------
RiuQwtSymbol::RiuQwtSymbol(PointSymbolEnum riuStyle, const QString& label, LabelPosition labelPosition)
    : QwtSymbol(QwtSymbol::NoSymbol), m_label(label), m_labelPosition(labelPosition)
{ 
    QwtSymbol::Style style = QwtSymbol::NoSymbol;

    switch (riuStyle)
    {
    case SYMBOL_ELLIPSE:
        style = QwtSymbol::Ellipse;
        break;
    case SYMBOL_RECT:
        style = QwtSymbol::Rect;
        break;
    case SYMBOL_DIAMOND:
        style = QwtSymbol::Diamond;
        break;
    case SYMBOL_TRIANGLE:
        style = QwtSymbol::Triangle;
        break;
    case SYMBOL_CROSS:
        style = QwtSymbol::Cross;
        break;
    case SYMBOL_XCROSS:
        style = QwtSymbol::XCross;
        break;
    case SYMBOL_DOWN_TRIANGLE:
        style = QwtSymbol::DTriangle;
        break;
    case SYMBOL_LEFT_TRIANGLE:
        style = QwtSymbol::Path;
        {
            QPainterPath path;
            path.moveTo(0, 0);
            path.lineTo(-10, 10);
            path.lineTo(0, 20);
            path.lineTo(0, 0);
            setPath(path);
            setPinPoint(QPointF(0, 0));
        }
        break;
    case SYMBOL_RIGHT_TRIANGLE:
        style = QwtSymbol::Path;
        {
            QPainterPath path;
            path.moveTo(0, 0);
            path.lineTo(10, 10);
            path.lineTo(0, 20);
            path.lineTo(0, 0);
            setPath(path);
            setPinPoint(QPointF(0, 0));
        }
        break;
    case SYMBOL_LEFT_ANGLED_TRIANGLE:
        style = QwtSymbol::Path;
        {
            QPainterPath path;
            path.moveTo(0, 0);
            path.lineTo(0, 10);
            path.lineTo(-10, 10);
            path.lineTo(0, 0);
            setPath(path);
            setPinPoint(QPointF(0, 10));
        }
        break;
    case SYMBOL_RIGHT_ANGLED_TRIANGLE:
        style = QwtSymbol::Path;
        {
            QPainterPath path;
            path.moveTo(0, 0);
            path.lineTo(0, 10);
            path.lineTo(10, 10);
            path.lineTo(0, 0);
            setPath(path);
            setPinPoint(QPointF(0, 10));
        }
        break;
    case SYMBOL_UP_TRIANGLE:
        style = QwtSymbol::UTriangle;
        break;
    case SYMBOL_STAR1:
        style = QwtSymbol::Star1;
        break;
    case SYMBOL_STAR2:
        style = QwtSymbol::Star2;
        break;
    case SYMBOL_HEXAGON:
        style = QwtSymbol::Hexagon;
        break;
    default:
        break;
    }
    setStyle(style);
}