下面是初始化ui.
void className::InitUI()
{
QGridLayout *baseLayout = new QGridLayout();
mChartView = new QChartView(createBarChart()); //头文件中的定义 QChartView *mChartView;
baseLayout->addWidget(mChartView, 1, 0);
ui->groupBox->setLayout(baseLayout);
}
下面是创建柱状图的类.
QChart* className::createBarChart() const
{
QChart *chart = new QChart();
chart->setTitle("XXXX分析图");
chart->layout()->setContentsMargins(0, 0, 0, 0);//设置外边界全部为0
// chart->setMargins(QMargins(0, 0, 0, 0));//设置内边界全部为0
chart->setBackgroundRoundness(0);//设置背景区域无圆角
QBarSeries *series = new QBarSeries(chart);
chart->addSeries(series);
connect(series, SIGNAL(hovered(bool, int, QBarSet*)), this, SLOT(sltTooltip(bool, int, QBarSet*)));
chart->createDefaultAxes();
return chart;
}
下面是 sltTooltip 槽的实现.
private slots:
void sltTooltip();
void className::sltTooltip(bool status, int index, QBarSet *barset)
{
//鼠标指向图表柱时提示数值文本
QChart* pchart = mChartView->chart();
if(m_tooltip == nullptr)
{
m_tooltip = new QLabel(mChartView); //头文件中的定义 QLabel* m_tooltip = nullptr; //柱状体鼠标提示信息
m_tooltip->setStyleSheet("background: rgba(95,166,250,185);color: rgb(248, 248, 255);"
"border:0px groove gray;border-radius:10px;padding:2px 4px;"
"border:2px groove gray;border-radius:10px;padding:2px 4px");
m_tooltip->setVisible(false);
}
if (status)
{
double val = barset->at(index);
QPointF point(index, barset->at(index));
QPointF pointLabel = pchart->mapToPosition(point);
QString sText = QString("%1万人").arg(val);
m_tooltip->setText(sText);
m_tooltip->move(pointLabel.x(),pointLabel.y() - m_tooltip->height()*1.5);
m_tooltip->show();
}
else
{
m_tooltip->hide();
}
}