打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
QScatterSeries相关内容

学习一下Qt Charts的柱状图部分。参考书籍:Qt5.9 C 开发指南
效果图


头文件

#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <QtCharts/QChart>using namespace QtCharts;namespace Ui {class MainWindow;}class MainWindow : public QMainWindow{    Q_OBJECTpublic:    explicit MainWindow(QWidget *parent = nullptr);    ~MainWindow();private:    //创建散点图    void createScatterSeries();private slots:    void on_rdoCircle_clicked();    void on_rdoRectangle_clicked();    void on_rdoStar_clicked();    void on_btnScatterColor_clicked();    void on_btnScatterBorderColor_clicked();private:    Ui::MainWindow *ui;    QPainterPath m_starPath;    //保存星形路径};#endif // MAINWINDOW_H

cpp文件

#include "mainwindow.h"#include "ui_mainwindow.h"#include <QScatterSeries>#include <QValueAxis>#include <QtMath>#include <QColorDialog>#include <QDebug>MainWindow::MainWindow(QWidget *parent) :    QMainWindow(parent),    ui(new Ui::MainWindow){    ui->setupUi(this);    QStringList headText = QStringList() << QStringLiteral("产品价格") << QStringLiteral("空调(件)") << QStringLiteral("冰箱(件)") << QStringLiteral("洗衣机(件)") << QStringLiteral("总计(件)");    ui->tableWidget->setHorizontalHeaderLabels(headText);    ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);    for (int i = 0; i < ui->tableWidget->rowCount(); i  )    {        int AirConditioner = ui->tableWidget->item(i, 1)->text().toInt();        int Refrigerator   = ui->tableWidget->item(i, 2)->text().toInt();        int WashingMachine = ui->tableWidget->item(i, 3)->text().toInt();        int sum = AirConditioner   Refrigerator   WashingMachine;        QTableWidgetItem *item = new QTableWidgetItem(QString::number(sum));        ui->tableWidget->setItem(i, 4, item);    }    createScatterSeries();}MainWindow::~MainWindow(){    delete ui;}void MainWindow::createScatterSeries(){    ui->chartViewScatter->setRenderHint(QPainter::Antialiasing);    ui->chartViewScatter->chart()->setTitle(QStringLiteral("QScatterSeries演示"));    ui->chartViewScatter->chart()->setTheme(QChart::ChartThemeBlueCerulean);    //创建散点图序列,并添加数据    QScatterSeries *scatterSeries[4];    for (int i = 0; i < 4; i  )    {        scatterSeries[i] = new QScatterSeries;        scatterSeries[i]->setMarkerSize(30.0);    }    for (int row = 0; row < 4; row  )    {        scatterSeries[0]->append((row   1) * 1000, ui->tableWidget->item(row, 1)->text().toInt());        scatterSeries[1]->append((row   1) * 1000, ui->tableWidget->item(row, 2)->text().toInt());        scatterSeries[2]->append((row   1) * 1000, ui->tableWidget->item(row, 3)->text().toInt());        scatterSeries[3]->append((row   1) * 1000, ui->tableWidget->item(row, 4)->text().toInt());    }    //各物品设置散点样式:圆形    scatterSeries[0]->setMarkerShape(QScatterSeries::MarkerShapeCircle);    scatterSeries[1]->setMarkerShape(QScatterSeries::MarkerShapeCircle);    scatterSeries[2]->setMarkerShape(QScatterSeries::MarkerShapeCircle);    //平均分设置散点样式:星形    m_starPath.moveTo(28, 15);    for (int i = 1; i < 5;   i) {        m_starPath.lineTo(14   14 * qCos(0.8 * i * M_PI),                        15   14 * qSin(0.8 * i * M_PI));    }    m_starPath.closeSubpath();    QImage star(30, 30, QImage::Format_ARGB32);    star.fill(Qt::transparent);    QPainter painter(&star);    painter.setRenderHint(QPainter::Antialiasing);    painter.setPen(Qt::white);    painter.setBrush(Qt::yellow);    painter.drawPath(m_starPath);    scatterSeries[3]->setBrush(star);    scatterSeries[3]->setPen(QColor(Qt::transparent));    scatterSeries[0]->setName(QStringLiteral("空调"));    scatterSeries[1]->setName(QStringLiteral("冰箱"));    scatterSeries[2]->setName(QStringLiteral("洗衣机"));    scatterSeries[3]->setName(QStringLiteral("总计"));    for (int i = 0; i < 4; i  )    {        ui->chartViewScatter->chart()->addSeries(scatterSeries[i]);    }    //坐标轴    QValueAxis *axisX = new QValueAxis;    QValueAxis *axisY = new QValueAxis;    axisX->setRange(0, 5000);    axisX->setTickCount(6);    axisX->setTitleText(QStringLiteral("产品价格(元)"));    axisX->setLabelFormat("%d");    axisX->setVisible(true);    axisY->setRange(0, 300);    axisY->setTitleText(QStringLiteral("销售数量(件)"));    axisY->setLabelFormat("%d");    axisY->setVisible(true);    for (int i = 0; i < 4; i  )    {        ui->chartViewScatter->chart()->setAxisX(axisX, scatterSeries[i]);        ui->chartViewScatter->chart()->setAxisY(axisY, scatterSeries[i]);    }    //图例    ui->chartViewScatter->chart()->legend()->setAlignment(Qt::AlignRight);    ui->chartViewScatter->chart()->legend()->setMarkerShape(QLegend::MarkerShapeFromSeries);}void MainWindow::on_rdoCircle_clicked(){    //各物品设置散点样式:圆形    QList<QAbstractSeries *> lisSeries = ui->chartViewScatter->chart()->series();    for (int i = 0; i < 3; i  )    {        QScatterSeries *series = dynamic_cast<QScatterSeries *>(lisSeries.at(i));        series->setMarkerShape(QScatterSeries::MarkerShapeCircle);        series->setBrush(Qt::green);        series->setPen(QPen(Qt::white, 2));    }}void MainWindow::on_rdoRectangle_clicked(){    //各物品设置散点样式:矩形    QList<QAbstractSeries *> lisSeries = ui->chartViewScatter->chart()->series();    for (int i = 0; i < 3; i  )    {        QScatterSeries *series = dynamic_cast<QScatterSeries *>(lisSeries.at(i));        series->setMarkerShape(QScatterSeries::MarkerShapeRectangle);        series->setBrush(Qt::green);        series->setPen(QPen(Qt::white, 2));    }}void MainWindow::on_rdoStar_clicked(){    //各物品设置散点样式:星形    QImage star(30, 30, QImage::Format_ARGB32);    star.fill(Qt::transparent);    QPainter painter(&star);    painter.setRenderHint(QPainter::Antialiasing);    painter.setPen(Qt::white);    painter.setBrush(Qt::green);    painter.drawPath(m_starPath);    QList<QAbstractSeries *> lisSeries = ui->chartViewScatter->chart()->series();    for (int i = 0; i < 3; i  )    {        QScatterSeries *series = dynamic_cast<QScatterSeries *>(lisSeries.at(i));        series->setBrush(star);        series->setPen(QColor(Qt::transparent));    }}void MainWindow::on_btnScatterColor_clicked(){    QColor color(Qt::white);    QColorDialog dlg(color);    if (dlg.exec() == QDialog::Accepted)    {        color = dlg.currentColor();        QList<QAbstractSeries *> lisSeries = ui->chartViewScatter->chart()->series();        for (int i = 0; i < 3; i  )        {            QScatterSeries *series = dynamic_cast<QScatterSeries *>(lisSeries.at(i));            series->setBrush(color);            series->setPen(QColor(Qt::white));        }    }}void MainWindow::on_btnScatterBorderColor_clicked(){    QColor color(Qt::white);    QColorDialog dlg(color);    if (dlg.exec() == QDialog::Accepted)    {        color = dlg.currentColor();        QList<QAbstractSeries *> lisSeries = ui->chartViewScatter->chart()->series();        for (int i = 0; i < 3; i  )        {            QScatterSeries *series = dynamic_cast<QScatterSeries *>(lisSeries.at(i));            series->setPen(color);        }    }}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
OpenCV在Qt中显示视频的两种方法
QT 线程暂停,继续执行的一种实现
http://blog.csdn.net/qq419036154/article/deta...
Qt 字符串(QString)、信号与槽(QObject)详细篇
python实现小说阅读器
pyqt5 tablewidget 利用线程动态刷新数据
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服