//========================================================================= void BubbleChartView::prepareScene() { QPen peng(Qt::black); peng.setWidth(1.5); QBrush brushg(Qt::transparent); chartRectGI = scene()->addRect(chartRect, peng, brushg); gGrid.addToGroup(chartRectGI); setHeader(/*chartData.header*/ "Chart header"); ChartDataProvider *dp = dataProvider(); if ( dp->data.size() == 0 ) return; QPen pen(Qt::lightGray); pen.setWidth(0.05); QBrush brush(Qt::transparent); quint32 swidth = (int)this->sceneRect().height()*0.8; quint32 columnWidth = qMin((quint32)getConfig()->bubbleSize, swidth/dp->providers->count()); grid.clear(); for ( int i = 0; i < dp->providers->size(); i++ ) { BlastTaxDataProvider *provider = dp->providers->at(i); for ( int j = 0; j < dp->data.count(); j++) { if ( !dp->data.at(j).checked ) continue; const BlastTaxNodes &btns = dp->data.at(j).tax_nodes; BlastTaxNode *node = btns.at(i); if ( node != NULL ) { quint32 sum = node->sum(); if ( sum == 0 ) continue; CreateGraphNode(node, provider); } } qreal x1 = i*columnWidth; QGraphicsRectItem *gridItem = scene()->addRect(chartRect.x()+x1, chartRect.y(), columnWidth, chartRect.height(), pen, brush); grid.append(gridItem); gGrid.addToGroup(gridItem); scene()->addItem(&gGrid); gGrid.setVisible(getConfig()->showGrid); // Create horizontal axe labels BlastTaxDataProvider *p = dp->providers->at(i); QString stxt = p->name; if ( stxt.length() > 30 ) { stxt.truncate(27); stxt.append("..."); } QGraphicsTextItem *item = scene()->addText(stxt); item->setToolTip(p->name); item->setRotation(45); horizontalLegend.append(item); } for ( int j = 0; j < dp->data.count(); j++) { const BlastTaxNodes &btns = dp->data.at(j).tax_nodes; QString txt; for ( int i = 0 ; i < btns.size(); i++ ) { if ( btns[i] == NULL ) continue; txt = btns[i]->getText(); break; } QString stxt = txt; if ( stxt.length() > 30 ) { stxt.truncate(27); stxt.append("..."); } QGraphicsTextItem *item = scene()->addText(stxt); item->installEventFilter(this); item->setToolTip(txt); item->setVisible(dp->data.at(j).checked); verticalLegend.append(item); } header->setPos(0, 10-MARGIN); quint32 tw = header->textWidth(); header->setTextWidth(qMax(tw, dp->providers->count()*columnWidth)); }