Qt 输入一组数,排序后用柱状图显示

Qt柱状图,需要使用到QChart模块,因此需要在安装Qt时勾选上QChart模块。然后在工程.pro文件中加上 QT += charts

参考代码:

cpp 复制代码
//MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QPushButton>
#include <QLineEdit>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

public slots:
    void slotBtnClicked();

private:
    Ui::MainWindow *ui;
    QLineEdit *edit;
    QPushButton *btn;
};


#endif // MAINWINDOW_H
cpp 复制代码
//MainWindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"


#include <QtCharts/QChartView>
#include <QtCharts/QBarSeries>
#include <QtCharts/QBarSet>
#include <QtCharts/QLegend>
#include <QtCharts/QBarCategoryAxis>

QT_CHARTS_USE_NAMESPACE



MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    edit = new QLineEdit(this);
    edit->move(50,50);
    edit->resize(300,30);

    btn = new QPushButton(this);
    btn->setText(QString::fromLocal8Bit("排序"));
    btn->move(400,50);
    btn->resize(100,30);
    connect(btn, SIGNAL(clicked()), this, SLOT(slotBtnClicked()));

    this->resize(600,100);

}

void MainWindow::slotBtnClicked()
{
    QString str = edit->text();
    QStringList list = str.split(" ");
    list.erase(std::remove_if(list.begin(), list.end(), [](const QString& tmp){return tmp.isEmpty();}), list.end());

    for(int i=0; i<list.count(); i++){
        for(int j=i+1; j<list.count(); j++){
            if(list[i].toInt() > list[j].toInt()){
                QString tmp = list[i];
                list[i] = list[j];
                list[j] = tmp;
            }
        }
    }


    QBarSeries *series = new QBarSeries();
    for(auto it:list){
        QBarSet *set = new QBarSet(it);
        *set << it.toInt();
        series->append(set);
    }

    QChart *chart = new QChart(); // 实例化QChart
    chart->addSeries(series);    //往Chart里添加series
    chart->setTitle(QString::fromLocal8Bit("排序后数据"));  //设置表格头
    chart->setAnimationOptions(QChart::SeriesAnimations);


    QStringList categories;  //创建字符串List
    categories << "data";
    QBarCategoryAxis *axis = new QBarCategoryAxis();   //实例化坐标轴文字标识轴
    axis->append(categories);   //将字符串列表append到文字标识轴里
    chart->createDefaultAxes();//创建默认的坐标轴(笛卡尔坐标),一定要有这一句
    chart->setAxisX(axis, series);//设置坐标轴
    chart->legend()->setVisible(true); //设置图例为显示状态
    chart->legend()->setAlignment(Qt::AlignBottom);//设置图例的显示位置在底部

    //显示容器 QChartView
    QChartView *chartView = new QChartView(chart, this);  //添加Chart到QChartView上
    chartView->setRenderHint(QPainter::Antialiasing);
    chartView->move(50,100);
    chartView->resize(600,400);
    chartView->setVisible(true);

    this->resize(900,600);
}

MainWindow::~MainWindow()
{
    delete ui;
}

效果图:

相关推荐
code_pgf3 小时前
C++11 / C++14 / C++17 / C++20 新特性总结
c++·c++20
颜x小7 小时前
[C#] C++与c#语法对比
开发语言·c++·c#
汉克老师8 小时前
GESP2026年3月认证C++八级( 第三部分编程题(2、子图最短路)精讲
c++·最短路·floyd·gesp8级
abcd_zjq9 小时前
海康线扫相机使用
c++·海康
十五年专注C++开发9 小时前
C++设计一个函数来求容器元素绝对值之和的平均值
c++·模板·accumulate
SilentSlot9 小时前
【C/C++】手写 DPDK 协议栈(十一):基于 PPS、SYN 比例和源 IP 熵的 DDoS 检测
c语言·c++·tcp/ip
用户8402409736089 小时前
使用 PyQt5 打造功能完备的 PDF 编辑器:从设计到实现全解析
qt
王老师青少年编程10 小时前
csp信奥赛C++高频考点专项训练:【排序算法】案例9:成绩排序
c++·排序算法·csp·高频考点·信奥赛·成绩排序
程序喵大人11 小时前
【C++进阶】STL容器与迭代器 - 05 map 和 set 为什么按键保持有序
开发语言·c++·容器·迭代器·stl
ShineWinsu11 小时前
对于Linux:HTTP中cookie、session的解析
linux·网络·c++·网络协议·http·cookie·session