2012-02-28 4 views
0

QtでKDChartライブラリを使って作成した円グラフの各項目にテキストラベルを設定する方法はありますか?KDChart円グラフの項目のラベルを設定するにはどうすればいいですか?

具体的には、この特定のケースではモデル/ビューアーキテクチャを使用していません。 KDChart::Widgetでも作成し、Widget::setDataCell()を使用してグラフに記入してください。

おそらく、軸のテキストラベルを設定するいくつかの方法がありますが、円グラフに似たようなものはありません。とにかくそれは私が必要とするものではありません。私はその軸のためではなく、特定の点のラベルを設定したい。円グラフに適用すると、タイトルのついたセクターのようなものになります。

私はおそらくKDChart::Legendを使って、必要な動作を達成することができますが、動作していないと考えました。

ここにコードサンプルがありますが、多分役立つかもしれません。しかし、(乱雑ラインのクリア)それが変わったのことを心に留めておくと、私はその正しさをテストしていません:

KDChart::Widget* newChart = new KDChart::Widget; 
newChart->setType(KDChart::Widget::Pie); 
int curColNo = 0; // it's not a size_t 'coz setDataCell requires an int 
for(QVector::const_iterator curValueIt = response.begin(); curValueIt != response.end(); ++curValueIt) 
{ 
    newChart->setDataCell(0, curColNo, *curValueIt); 
    newChart->diagram()->setBrush(curColNo++, QBrush(m_responsesColors[curValueIt])); 
    m_legend->addDiagram(newChart->diagram()); 
} 

m_mainLayout.addWidget(newChart, m_curLayoutRowNo, m_curLayoutColNo); 

もう一つ - 私は一貫性のない列番号でそれを埋めるためにしようとした(0,2,5,9等)と円グラフが正しく描かれなかった - いくつかのセクターは他のセクターと重なった。他のタイプのチャート(例えば棒グラフ)では、すべてのデータが正しく可視化されていました。

商品ラベルについてご意見はありますか?

P.S.私は、円グラフの列をいくつかスキップして塗りつぶすのが間違っていることを理解しました。一貫性のない列を塗りつぶした場合(その一部をスキップする場合)、スキップされた列の値を明示的にゼロに設定するだけです。間違った円グラフの視覚化の問題を修正します。

おそらくKDChartはスキップされた列を自動的に調べ、自動的にnullに設定する必要がありますが、そうではありません。それで自分でやってください。

希望、これは誰かを助けるでしょう。

答えて

0

私は自分で解決策を見つけました。 KDChartライブラリの少量の情報を考慮し、同様の問題を抱える人に役立つことを願ってここに投稿しています。

解決策はKDChart階層のかなり深いところにあります。手動でラベル表示をオンにする必要があります。私はそれのための分離された関数を作成しました。

void setValuesVisible(KDChart::AbstractDiagram* diagram, bool visible) throw() 
{ 
    const QFont font(QFont("Comic", 10)); // the font for all labels 
    const int colCount = diagram->model()->columnCount(); 
    for (int iColumn = 0; iColumn < colCount; ++iColumn) 
    { 
     //QBrush brush(diagram->brush(iColumn)); // here you can get a color of the specified column 
     KDChart::DataValueAttributes a(diagram->dataValueAttributes(iColumn)); 
     KDChart::TextAttributes ta(a.textAttributes()); 
     ta.setRotation(0); 
     ta.setFont(font); 
     ta.setAutoRotate(true); 
     //ta.setPen(QPen(brush.color())); // here you can change a color of the current label's text 

     ta.setVisible(visible); // this line turns on labels display 

     a.setTextAttributes(ta); 
     a.setVisible(true); 
     diagram->setDataValueAttributes(iColumn, a); 
    } 

    diagram->update(); 
} 

短いソリューションがあることを、忘れないでください - ちょうどDataValueAttributes「グローバル」のTextAttributesを設定する(KDChart::AbstractDiagramクラスのそれのための方法がある - どんなのparamsなしAbstractDiagram::dataValueAttributes()は)あなたがユニークを必要としない場合各ラベルのテキストパラメータ。

関連する問題