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;
}

效果图:

相关推荐
言言的底层世界1 天前
c++中STL容器及算法等
开发语言·c++·经验分享·笔记
Mr_WangAndy1 天前
C++17 新特性_第一章 C++17 语言特性___has_include,u8字符字面量
c++·c++40周年·c++17新特性·__has_include·u8字面量
liu****1 天前
八.函数递归
c语言·开发语言·数据结构·c++·算法
韭菜钟1 天前
在Qt中使用QuickJS
开发语言·qt
Vanranrr1 天前
C++临时对象与悬空指针:一个导致资源加载失败的隐藏陷阱
服务器·c++·算法
BestOrNothing_20151 天前
【C++基础】Day 5:struct 与 class
c++·c·class类·struct结构体·typename模板·private与public
枫叶丹41 天前
【Qt开发】Qt窗口(三) -> QStatusBar状态栏
c语言·开发语言·数据库·c++·qt·microsoft
Skrrapper1 天前
【编程史】微软的起家之路:一代传奇的诞生
数据库·c++·microsoft
Super小白&1 天前
C++ 高可用线程池实现:核心 / 非核心线程动态扩缩容 + 任务超时监控
c++·线程池
多多想1 天前
C++扫盲——为什么C/C++分文件要写h和cpp?
c语言·c++