您的位置:首页 > 大数据 > 人工智能

使用QPainter 画饼图

2014-02-19 14:12 435 查看
具体如图所示:





当单击不同的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);


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: