Search code examples
qtqwt

Create multiple QwtPlotCurve dynamically


I have a QStringList (m_NameList) which contains 4 elements in it. For each string, I create a QwtPlotCurve (QMap < QString, QwtPlotCurve*> m_NamePlotC;) and set different Pens for each plotCurve:

for(unsigned int i= 0; i< m_NameList.count(); ++i)
{
  QwtText title(m_NameList.at(i));
  title.setFont(fontNormal);

  m_NamePlotC[m_NameList.at(i)]= new QwtPlotCurve();
  m_NamePlotC[m_NameList.at(i)]->setTitle(title);

  if(i== 0)
  {
    m_NamePlotC[m_NameList.at(i)]->setPen(QPen(Qt::green, 1, Qt::DashLine));
  }
  else if(i== 1)
  {
    m_NamePlotC[m_NameList.at(i)]->setPen(QPen(Qt::blue, 1, Qt::DashLine));
  }
  else if(i== 2)
  {
    m_NamePlotC[m_NameList.at(i)]->setPen(QPen(Qt::cyan, 1, Qt::DashLine));
  }
  else if(i== 3)
  {
    m_NamePlotC[m_NameList.at(i)]->setPen(QPen(Qt::yellow, 1, Qt::DashLine));
  }

  m_NamePlotC[m_NameList.at(i)]->setRenderHint(QwtPlotItem::RenderAntialiased, true);
  m_NamePlotC[m_NameList.at(i)]->setCurveAttribute(QwtPlotCurve::Fitted);
}

My problem is with the getting rid of if-statements. Is there any creative way that I set pens dynamically based on the number of QStringList elements with different color for each element in my QStringList, without using ifs?

Thank you!


Solution

  • It seems that in each line, the only thing changing is the colour. You can maintain a list of colours, let's call it coloursList and then replace the ifs by

    m_NamePlotC[m_NameList.at(i)]->setPen(QPen(coloursList[i], 1, Qt::DashLine));
    

    I'm not sure which language you have used, so my indexing syntax may be a bit off, but I hope the logic is clear.