2012-02-28 2 views
0

Qt에서 KDChart 라이브러리를 사용하여 만든 파이 다이어그램의 각 항목에 텍스트 레이블을 설정할 수있는 방법이 있습니까?KD 차트 원형 다이어그램의 항목에 레이블을 설정하는 방법은 무엇입니까?

좀 더 구체적으로 말하자면이 특정한 경우에는 모델/뷰 아키텍처를 사용하지 않습니다. 나는 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. 파이 차트의 열을 채우는 것이 잘못된 이유를 알아 냈습니다. 일치하지 않는 열을 채우는 경우 (일부는 건너 뛰기), 건너 뛴 열의 값을 명시 적으로 0으로 설정하면됩니다. 잘못된 원형 차트의 시각화 문제를 해결합니다.

아마 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은 (어떤 PARAMS없이 AbstractDiagram::dataValueAttributes() a를 KDChart::AbstractDiagram 클래스의 그것을위한 방법이있다) "글로벌"의 TextAttributes 설정 각 라벨의 텍스트 매개 변수

관련 문제