Qt 动态创建多条QwtPlotCurve

Qt 动态创建多条QwtPlotCurve,qt,qwt,Qt,Qwt,我有一个QStringList m_名称列表,其中包含4个元素。对于每个字符串,我创建一个QwtPlotCurve QMapm_NamePlotC;并为每个绘图曲线设置不同的笔: 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 Qw

我有一个QStringList m_名称列表,其中包含4个元素。对于每个字符串,我创建一个QwtPlotCurve QMapm_NamePlotC;并为每个绘图曲线设置不同的笔:

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);
}
我的问题是去掉if语句。有没有一种创造性的方法可以让我在不使用ifs的情况下,根据QStringList中每个元素具有不同颜色的QStringList元素的数量动态设置画笔


谢谢大家!

似乎在每一行中,唯一改变的是颜色。您可以维护一个颜色列表,我们称之为颜色列表,然后用替换ifs


<>我不确定你使用了哪种语言,所以我的索引语法可能有点不正常,但是我希望逻辑清晰。

< p>我使用C++。我按照你说的做了,而且很有效:

QStringList m_ColorList;
m_ColorList<< "orange";
m_ColorList<< "green";
m_ColorList<< "cyan";
m_ColorList<< "yellow";
m_ColorList<< "magenta";
m_ColorList<< "blue";
m_ColorList<< "white";
m_ColorList<< "gray";
m_ColorList<< "red";

m_NamePlotC[m_NameList.at(i)]->setPen(QPen(QColor(m_ColorList[i]), 1, Qt::DashLine));
QStringList m_ColorList;
m_ColorList<< "orange";
m_ColorList<< "green";
m_ColorList<< "cyan";
m_ColorList<< "yellow";
m_ColorList<< "magenta";
m_ColorList<< "blue";
m_ColorList<< "white";
m_ColorList<< "gray";
m_ColorList<< "red";

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