Qwt中有些时候会用到QwtPlotPicker类来设置绘图中的拾取器,显示当前位置的坐标信息。
若坐标轴的刻度值不是自定义,只需要将picker跟踪模式设置为AlwaysOn
picker->setTrackerMode( QwtPicker::AlwaysOn );
若坐标轴的刻度值是自定义,若将x轴定义为系统时间(分、秒),y轴保持不变,此时显示当前信息,需要继承QwtPlotPicker类覆盖
其中的virtual QwtText trackerTextF( const QPointF &pos ) const函数,代码如下
class Picker: public QwtPlotPicker
{
public:
Picker( QWidget *canvas ):QwtPlotPicker( canvas )
{
}
protected:
virtual QwtText trackerTextF( const QPointF &pos ) const
{
QString text;
QDateTime dt;
dt.setTime_t( ( int )pos.x() ); //获取时间
text = dt.toString("mm:ss");
text += " " + QString( "%1" ).arg( pos.y(), 0, 'f', 1 );
QwtText qwttext( text );
return qwttext;
}
};
除了对拾取器显示的设置以外,有些时候还需要对拾取器自身的设置。
代码如下:
picker = new Picker( canvas );
picker->setTrackerMode( QwtPicker::AlwaysOn ); //跟踪模式
picker->setTrackerPen( QColor( Qt::green ) ); //跟踪显示字体颜色
//只有定义了它 才能设置对应的样式 比如想设置RectRubberBand必须先setStateMachine( new QwtPickerRectPointMachine() );
picker->setStateMachine( new QwtPickerDragPointMachine() );
picker->setRubberBandPen( QColor( Qt::green ) ); //拾取器点击后样式颜色
picker->setRubberBand( QwtPicker::CrossRubberBand ); //拾取器点击后样式