2017-05-15 3 views
0

J'ai un QStringList (m_NameList) qui contient 4 éléments. Pour chaque chaîne, je crée un QwtPlotCurve (QMap < QString, QwtPlotCurve*> m_NamePlotC;) et définir différents stylos pour chaque plotCurve:Créer plusieurs QwtPlotCurve dynamiquement

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); 
} 

Mon problème est avec le se débarrasser de if -statements. Y at-il une manière créative que j'ai placé des stylos dynamiquement basé sur le nombre de QStringList éléments avec la couleur différente pour chaque élément dans mon QStringList, sans utiliser if s?

Merci!

Répondre

1

Il semble que dans chaque ligne, la seule chose qui change est la couleur. Vous pouvez maintenir une liste de couleurs, nous allons l'appeler coloursList puis remplacer les if s par

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

Je ne sais pas quelle langue vous avez utilisé, donc ma syntaxe d'indexation peut être un peu loin, mais j'espère la logique est claire.

0

J'utilise C++. Je l'ai fait comme vous l'avez dit et cela fonctionne:

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)); 
+1

Veuillez ne pas ajouter "merci" comme réponse. Au lieu de cela, ** [acceptez la réponse] (https://stackoverflow.com/help/accepted-answer) ** que vous avez trouvé plus utile. - [De l'avis] (/ review/low-quality-posts/17147318) – rafalmp