使用QPainter 画饼图

具体如图所示:



当单击不同的tab标签时,根据表中的数据显示不同的饼图。

具体部分代码如下所示:

//根据数据绘制饼图
void ProTeam::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    painter.fillRect(510,420,10,10,Qt::red);
    painter.fillRect(510,440,10,10,Qt::blue);
    painter.fillRect(510,460,10,10,Qt::yellow);
    painter.fillRect(510,480,10,10,Qt::green);
    double first=ui->lineFirst->text().toDouble();
    double second=ui->lineSecond->text().toDouble();
    double third=ui->lineThird->text().toDouble();
    double fourth=ui->lineFour->text().toDouble();
    double sum=first+second+third+fourth;
    QPainter painter2(this);//四种信号量的饼状图绘制
    painter2.setBrush(Qt::red);
    painter2.setPen(Qt::NoPen);
    painter2.drawPie(400,400,100,100,0,360*16*first/sum);
    painter2.setBrush(Qt::blue);
    painter2.drawPie(400,400,100,100,360*16*first/sum,360*16*second/sum);
    painter2.setBrush(Qt::yellow);
    painter2.drawPie(400,400,100,100,360*16-360*16*third/sum-360*16*fourth/sum,360*16*third/sum);
    painter2.setBrush(Qt::green);
    painter2.drawPie(400,400,100,100,360*16-360*16*fourth/sum,360*16*fourth/sum);
}
//当lineEdit框中的内容发生改变时,所画的饼图也跟着改变
void ProTeam::on_lineFirst_textChanged(const QString &arg1)
{
    update();
}
 
 
void ProTeam::on_lineSecond_textChanged(const QString &arg1)
{
    update();
}
 
 
void ProTeam::on_lineThird_textChanged(const QString &arg1)
{
    update();
}
 
 
void ProTeam::on_lineFour_textChanged(const QString &arg1)
{
    update();
}
 当单击不同的tab标签时,传递标签下面所对应的表格的数据。 
 

void ProTeam::on_tabWidget_tabBarClicked(int index)
{
    if(index==0)
    {
       int row=ui->tableWidget->rowCount()-1;
       ui->lineFirst->setText(ui->tableWidget->item(row,3)->text());
       ui->lineSecond->setText(ui->tableWidget->item(row,4)->text());
       ui->lineThird->setText(ui->tableWidget->item(row,5)->text());
       ui->lineFour->setText(ui->tableWidget->item(row,6)->text());
       ui->label->setText(codeChange("已完成任务"));
       ui->label_2->setText(codeChange("未完成任务"));
       ui->label_3->setText(codeChange("过期任务"));
       ui->label_4->setText(codeChange("关闭任务"));
    }
    else if(index==1)
    {
        int row=ui->tableWidget_2->rowCount()-1;
        ui->lineFirst->setText(ui->tableWidget_2->item(row,2)->text());
        ui->lineSecond->setText(ui->tableWidget_2->item(row,3)->text());
        ui->lineThird->setText(ui->tableWidget_2->item(row,4)->text());
        ui->lineFour->setText(ui->tableWidget_2->item(row,5)->text());
        ui->label->setText(codeChange("已修正BUG"));
        ui->label_2->setText(codeChange("未修正BUG"));
        ui->label_3->setText(codeChange("保留BUG"));
        ui->label_4->setText(codeChange("关闭BUG"));
    }
    else if(index==2)
    {
        int row=ui->tableWidget_3->rowCount()-1;
        ui->lineFirst->setText(ui->tableWidget_3->item(row,3)->text());
        ui->lineSecond->setText(ui->tableWidget_3->item(row,4)->text());
        ui->lineThird->setText(ui->tableWidget_3->item(row,5)->text());
        ui->lineFour->setText(ui->tableWidget_3->item(row,6)->text());
        ui->label->setText(codeChange("已测试"));
        ui->label_2->setText(codeChange("未测试"));
        ui->label_3->setText(codeChange("已关闭测试"));
        ui->label_4->setText(codeChange("过期测试"));
    }
}
 
 
//编码转换
QString ProTeam::codeChange(const QByteArray &str){
    QTextCodec* codec = QTextCodec::codecForName("gb2312");
    QString s;
    s = codec->toUnicode(str);
    return s;
    }
 //使表格处于不可编辑状态代码如下:
    ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
   



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值