为什么对于QPieSlice的点击()信号不发射?(Why is the clicked() sig

2019-09-27 16:53发布

我使用Qt图表模块绘制嵌套甜甜圈图表就像在Qt的图表的例子。

我希望每一个部件(QPieSlice)响应鼠标事件,悬停()信号很好地工作,但是,点击()信号只在最后添加QPieSerie的QpieSlices工作。 看来其他QpieSlices不发射信号,因为如果我显式调用点击()函数,正确的时隙响应。 这段代码显示的问题

Widget::Widget(QWidget *parent): QWidget(parent){
    QChartView *chartView = new QChartView;
    QChart *chart = chartView->chart();

    for (int i = 0; i < donutCount; i++) {
    QPieSeries *donut = new QPieSeries;
    donut->setHoleSize(minSize + i * (maxSize - minSize) / donutCount);
    donut->setPieSize(minSize + (i + 1) * (maxSize - minSize) / donutCount);
    int sliceCount = 3 + qrand() % 3;
    for (int j = 0; j < sliceCount; j++) {
        qreal value = 100 + qrand() % 100;
        QPieSlice *slice = new QPieSlice(QString("%1").arg(value), value);
        slice->setLabelVisible(true);
        slice->setLabelColor(Qt::white);
        slice->setLabelPosition(QPieSlice::LabelInsideTangential);
        connect(slice, SIGNAL(hovered(bool)), this, SLOT(explodeSlice(bool)));
        connect(slice, SIGNAL(clicked()), this, SLOT(selected()));
        donut->append(slice);
    }
    m_donuts.append(donut);
    chartView->chart()->addSeries(donut);
}

void Widget::selected()
{
    QPieSlice *slice = qobject_cast<QPieSlice *>(sender());
    cout << slice->label().toStdString() << endl;
}

我究竟做错了什么? 有人能帮我吗?

文章来源: Why is the clicked() signal for the QPieSlice not emitted?