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

效果图:

相关推荐
wwww.wwww10 分钟前
使用qt编写上位机程序,出现串口死掉无法接受数据的bug
c++·qt·bug
大葱明耗子30 分钟前
拓展三字棋
数据结构·c++·算法
卜及中2 小时前
【C++11】哈希表与无序容器:从概念到应用
c++·算法·哈希算法
dowhileprogramming3 小时前
C++ 中重载函数右值引用和左值引用匹配的优先级
java·开发语言·c++
西哥写代码3 小时前
vs2017 c++ 使用sqlite3数据库
c++·sqlite·vs2017
zhangzhangkeji3 小时前
QT6 源,七章对话框与多窗体(8) 消息对话框 QMessageBox :属性,信号函数,成员函数,以及静态成员函数,源代码带注释
qt
Littlewith3 小时前
Node.js:Web模块、Express框架
java·开发语言·前端·c++·后端·node.js·express
TravisBytes3 小时前
【C++进阶】揭秘list迭代器:从底层实现到极致优化
开发语言·c++·list
linux开发之路3 小时前
rk平台(rv1126/rk3588)音视频-交叉编译FFmpeg7.1
c++·ffmpeg·音视频·嵌入式·rv1126/rk358
whxnchy4 小时前
C++刷题常用方法
开发语言·c++·算法