地面站终端 App
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

137 lines
3.8 KiB

/* -*- 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
*****************************************************************************/
#ifndef QWT_PLOT_GLCANVAS_H
#define QWT_PLOT_GLCANVAS_H
#include "qwt_global.h"
#include <qframe.h>
#include <qgl.h>
class QwtPlot;
/*!
\brief An alternative canvas for a QwtPlot derived from QGLWidget
QwtPlotGLCanvas implements the very basics to act as canvas
inside of a QwtPlot widget. It might be extended to a full
featured alternative to QwtPlotCanvas in a future version of Qwt.
Even if QwtPlotGLCanvas is not derived from QFrame it imitates
its API. When using style sheets it supports the box model - beside
backgrounds with rounded borders.
\sa QwtPlot::setCanvas(), QwtPlotCanvas
\note You might want to use the QPaintEngine::OpenGL paint engine
( see QGL::setPreferredPaintEngine() ). On a Linux test system
QPaintEngine::OpenGL2 shows very basic problems ( wrong
geometries of rectangles ) but also more advanced stuff
like antialiasing doesn't work.
\note Another way to introduce OpenGL rendering to Qwt
is to use QGLPixelBuffer or QGLFramebufferObject. Both
type of buffers can be converted into a QImage and
used in combination with a regular QwtPlotCanvas.
*/
class QWT_EXPORT QwtPlotGLCanvas: public QGLWidget
{
Q_OBJECT
Q_ENUMS( Shape Shadow )
Q_PROPERTY( Shadow frameShadow READ frameShadow WRITE setFrameShadow )
Q_PROPERTY( Shape frameShape READ frameShape WRITE setFrameShape )
Q_PROPERTY( int lineWidth READ lineWidth WRITE setLineWidth )
Q_PROPERTY( int midLineWidth READ midLineWidth WRITE setMidLineWidth )
Q_PROPERTY( int frameWidth READ frameWidth )
Q_PROPERTY( QRect frameRect READ frameRect DESIGNABLE false )
public:
/*!
\brief Frame shadow
Unfortunately it is not possible to use QFrame::Shadow
as a property of a widget that is not derived from QFrame.
The following enum is made for the designer only. It is safe
to use QFrame::Shadow instead.
*/
enum Shadow
{
//! QFrame::Plain
Plain = QFrame::Plain,
//! QFrame::Raised
Raised = QFrame::Raised,
//! QFrame::Sunken
Sunken = QFrame::Sunken
};
/*!
\brief Frame shape
Unfortunately it is not possible to use QFrame::Shape
as a property of a widget that is not derived from QFrame.
The following enum is made for the designer only. It is safe
to use QFrame::Shadow instead.
\note QFrame::StyledPanel and QFrame::WinPanel are unsuported
and will be displayed as QFrame::Panel.
*/
enum Shape
{
NoFrame = QFrame::NoFrame,
Box = QFrame::Box,
Panel = QFrame::Panel
};
explicit QwtPlotGLCanvas( QwtPlot * = NULL );
virtual ~QwtPlotGLCanvas();
void setFrameStyle( int style );
int frameStyle() const;
void setFrameShadow( Shadow );
Shadow frameShadow() const;
void setFrameShape( Shape );
Shape frameShape() const;
void setLineWidth( int );
int lineWidth() const;
void setMidLineWidth( int );
int midLineWidth() const;
int frameWidth() const;
QRect frameRect() const;
Q_INVOKABLE QPainterPath borderPath( const QRect & ) const;
virtual bool event( QEvent * );
public Q_SLOTS:
void replot();
protected:
virtual void paintEvent( QPaintEvent * );
virtual void drawBackground( QPainter * );
virtual void drawBorder( QPainter * );
virtual void drawItems( QPainter * );
private:
class PrivateData;
PrivateData *d_data;
};
#endif