/*! \brief Initializes a QwtPlot instance \param title Title text */ void QwtPlot::initPlot( const QwtText &title ) { d_data = new PrivateData; d_data->layout = new QwtPlotLayout; d_data->autoReplot = false; // title d_data->titleLabel = new QwtTextLabel( this ); d_data->titleLabel->setObjectName( "QwtPlotTitle" ); d_data->titleLabel->setFont( QFont( fontInfo().family(), 14, QFont::Bold ) ); QwtText text( title ); text.setRenderFlags( Qt::AlignCenter | Qt::TextWordWrap ); d_data->titleLabel->setText( text ); // legend d_data->legend = NULL; // axis initAxesData(); // canvas d_data->canvas = new QwtPlotCanvas( this ); d_data->canvas->setObjectName( "QwtPlotCanvas" ); d_data->canvas->setFrameStyle( QFrame::Panel | QFrame::Sunken ); d_data->canvas->setLineWidth( 2 ); updateTabOrder(); setSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding ); resize( 200, 200 ); }
/*! \brief Update the entries for an item \param itemInfo Info for an item \param data List of legend entry attributes for the item */ void QwtLegend::updateLegend( const QVariant &itemInfo, const QList<QwtLegendData> &data ) { QList<QWidget *> widgetList = legendWidgets( itemInfo ); if ( widgetList.size() != data.size() ) { QLayout *contentsLayout = d_data->view->contentsWidget->layout(); while ( widgetList.size() > data.size() ) { QWidget *w = widgetList.takeLast(); contentsLayout->removeWidget( w ); // updates might be triggered by signals from the legend widget // itself. So we better don't delete it here. w->hide(); w->deleteLater(); } for ( int i = widgetList.size(); i < data.size(); i++ ) { QWidget *widget = createWidget( data[i] ); if ( contentsLayout ) contentsLayout->addWidget( widget ); if ( isVisible() ) { // QLayout does a delayed show, with the effect, that // the size hint will be wrong, when applications // call replot() right after changing the list // of plot items. So we better do the show now. widget->setVisible( true ); } widgetList += widget; } if ( widgetList.isEmpty() ) { d_data->itemMap.remove( itemInfo ); } else { d_data->itemMap.insert( itemInfo, widgetList ); } updateTabOrder(); } for ( int i = 0; i < data.size(); i++ ) updateWidget( widgetList[i], data[i] ); }
/*! \brief Insert a legend If the position legend is \c QwtPlot::LeftLegend or \c QwtPlot::RightLegend the legend will be organized in one column from top to down. Otherwise the legend items will be placed in a table with a best fit number of columns from left to right. If pos != QwtPlot::ExternalLegend the plot widget will become parent of the legend. It will be deleted when the plot is deleted, or another legend is set with insertLegend(). \param legend Legend \param pos The legend's position. For top/left position the number of colums will be limited to 1, otherwise it will be set to unlimited. \param ratio Ratio between legend and the bounding rect of title, canvas and axes. The legend will be shrinked if it would need more space than the given ratio. The ratio is limited to ]0.0 .. 1.0]. In case of <= 0.0 it will be reset to the default ratio. The default vertical/horizontal ratio is 0.33/0.5. \sa legend(), QwtPlotLayout::legendPosition(), QwtPlotLayout::setLegendPosition() */ void QwtPlot::insertLegend( QwtLegend *legend, QwtPlot::LegendPosition pos, double ratio ) { d_data->layout->setLegendPosition( pos, ratio ); if ( legend != d_data->legend ) { if ( d_data->legend && d_data->legend->parent() == this ) delete d_data->legend; d_data->legend = legend; if ( d_data->legend ) { if ( pos != ExternalLegend ) { if ( d_data->legend->parent() != this ) d_data->legend->setParent( this ); } const QwtPlotItemList& itmList = itemList(); for ( QwtPlotItemIterator it = itmList.begin(); it != itmList.end(); ++it ) { ( *it )->updateLegend( d_data->legend ); } QwtDynGridLayout *tl = qobject_cast<QwtDynGridLayout *>( d_data->legend->contentsWidget()->layout() ); if ( tl ) { switch ( d_data->layout->legendPosition() ) { case LeftLegend: case RightLegend: tl->setMaxCols( 1 ); // 1 column: align vertical break; case TopLegend: case BottomLegend: tl->setMaxCols( 0 ); // unlimited break; case ExternalLegend: break; } } } updateTabOrder(); } updateLayout(); }
/*! \brief Initializes a QwtPlot instance \param title Title text */ void QwtPlot::initPlot(const QString &title) { d_layout = new QwtPlotLayout; d_curves = new QwtCurveDict; d_markers = new QwtMarkerDict; d_autoReplot = FALSE; d_lblTitle = new QLabel(title, this); d_lblTitle->setFont(QFont(fontInfo().family(), 14, QFont::Bold)); d_lblTitle->setAlignment(Qt::AlignCenter|Qt::WordBreak|Qt::ExpandTabs); d_legend = new QwtLegend(this); d_autoLegend = FALSE; d_scale[yLeft] = new QwtScale(QwtScale::Left, this, "yLeft"); d_scale[yRight] = new QwtScale(QwtScale::Right, this, "yRight"); d_scale[xTop] = new QwtScale(QwtScale::Top, this, "xTop"); d_scale[xBottom] = new QwtScale(QwtScale::Bottom, this, "xBottom"); initAxes(); d_grid = new QwtPlotGrid(this); d_grid->setPen(QPen(Qt::black, 0, Qt::DotLine)); d_grid->enableXMin(FALSE); d_grid->enableYMin(FALSE); d_grid->setAxis(xBottom, yLeft); d_canvas = new QwtPlotCanvas(this); d_canvas->setFrameStyle(QFrame::Panel|QFrame::Sunken); d_canvas->setLineWidth(2); d_canvas->setMidLineWidth(0); #ifndef QWT_NO_COMPAT connect(d_canvas, SIGNAL(mousePressed(const QMouseEvent &)), this, SIGNAL(plotMousePressed(const QMouseEvent &))); connect(d_canvas, SIGNAL(mouseMoved(const QMouseEvent &)), this, SIGNAL(plotMouseMoved(const QMouseEvent &))); connect(d_canvas, SIGNAL(mouseReleased(const QMouseEvent &)), this, SIGNAL(plotMouseReleased(const QMouseEvent &))); #endif updateTabOrder(); QSizePolicy sp; sp.setHorData( QSizePolicy::MinimumExpanding ); sp.setVerData( QSizePolicy::MinimumExpanding ); setSizePolicy(sp); }
/*! \brief Update the entries for an item \param itemInfo Info for an item \param data List of legend entry attributes for the item */ void QwtLegend::updateLegend( const QVariant &itemInfo, const QList<QwtLegendData> &data ) { QList<QWidget *> widgetList = legendWidgets( itemInfo ); if ( widgetList.size() != data.size() ) { QLayout *contentsLayout = d_data->view->contentsWidget->layout(); while ( widgetList.size() > data.size() ) { QWidget *w = widgetList.takeLast(); contentsLayout->removeWidget( w ); // updates might be triggered by signals from the legend widget // itself. So we better don't delete it here. w->hide(); w->deleteLater(); } for ( int i = widgetList.size(); i < data.size(); i++ ) { QWidget *widget = createWidget( data[i] ); if ( contentsLayout ) contentsLayout->addWidget( widget ); widgetList += widget; } if ( widgetList.isEmpty() ) { d_data->itemMap.remove( itemInfo ); } else { d_data->itemMap.insert( itemInfo, widgetList ); } updateTabOrder(); } for ( int i = 0; i < data.size(); i++ ) updateWidget( widgetList[i], data[i] ); }
/*! Specify the position of the legend within the widget. If the position legend is \c QwtPlot::Left or \c QwtPlot::Right the legend will be organized in one column from top to down. Otherwise the legend items will be placed be placed in a table with a best fit number of columns from left to right. \param pos The legend's position. Valid values are \c QwtPlot::Left, \c QwtPlot::Right, \c QwtPlot::Top, \c QwtPlot::Bottom. \param ratio Ratio between legend and the bounding rect of title, canvas and axes. The legend will be shrinked if it would need more space than the given ratio. The ratio is limited to ]0.0 .. 1.0]. In case of <= 0.0 it will be reset to the default ratio. The default vertical/horizontal ratio is 0.33/0.5. \sa QwtPlot::legendPosition(), QwtPlotLayout::setLegendPosition() */ void QwtPlot::setLegendPosition(QwtPlot::Position pos, double ratio) { if (pos != d_layout->legendPosition()) { d_layout->setLegendPosition(pos, ratio); QLayout *l = d_legend->contentsWidget()->layout(); if ( l && l->inherits("QwtDynGridLayout") ) { QwtDynGridLayout *tl = (QwtDynGridLayout *)l; if ( d_layout->legendPosition() == QwtPlot::Top || d_layout->legendPosition() == QwtPlot::Bottom ) { tl->setMaxCols(0); // unlimited } else tl->setMaxCols(1); // 1 column: align vertical } updateLayout(); updateTabOrder(); } }