动态创建多个 QwtPlotCurve
Create multiple QwtPlotCurve dynamically
我有一个 QStringList (m_NameList)
,其中包含 4 个元素。对于每个字符串,我创建一个 QwtPlotCurve (QMap < QString, QwtPlotCurve*> m_NamePlotC;)
并为每个 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);
}
我的问题是摆脱 if
语句。有没有什么创造性的方法可以根据 QStringList
元素的数量动态设置笔,每个元素在我的 QStringList
中具有不同的颜色,而不使用 if
s?
谢谢!
似乎在每一行中,唯一改变的就是颜色。您可以维护一个颜色列表,我们称它为 coloursList
,然后将 if
替换为
m_NamePlotC[m_NameList.at(i)]->setPen(QPen(coloursList[i], 1, Qt::DashLine));
我不确定你使用的是哪种语言,所以我的索引语法可能有点偏差,但我希望逻辑清晰。
我正在使用 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_NameList)
,其中包含 4 个元素。对于每个字符串,我创建一个 QwtPlotCurve (QMap < QString, QwtPlotCurve*> m_NamePlotC;)
并为每个 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);
}
我的问题是摆脱 if
语句。有没有什么创造性的方法可以根据 QStringList
元素的数量动态设置笔,每个元素在我的 QStringList
中具有不同的颜色,而不使用 if
s?
谢谢!
似乎在每一行中,唯一改变的就是颜色。您可以维护一个颜色列表,我们称它为 coloursList
,然后将 if
替换为
m_NamePlotC[m_NameList.at(i)]->setPen(QPen(coloursList[i], 1, Qt::DashLine));
我不确定你使用的是哪种语言,所以我的索引语法可能有点偏差,但我希望逻辑清晰。
我正在使用 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));