IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> Qt tableWidget排序等 -> 正文阅读

[C++知识库]Qt tableWidget排序等

前言

tableWidget用于数据显示,继承tableView,想要了解更多关于tableWidget及、tableView。点击qtableview和qtablewidget区别

例子

这里以一个LPL春季赛战队排名数据为例,只搞了前10,可以点击表头排序
在这里插入图片描述
在这里插入图片描述

关键代码

maindialog.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTableWidget>
#include <QHeaderView>
#include <QDebug>
#include <QStyle>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    setWindowTitle("LPL春季赛战队积分(2020/3/5)");

    // 构造了一个QTableWidget的对象,并且设置为10行,5列
    QTableWidget *tableWidget = new QTableWidget(10,4,this);
    // 也可用下面的方法构造QTableWidget对象
   // QTableWidget *tableWidget = new QTableWidget;
   // tableWidget->setRowCount(10); //设置行数为10
   // tableWidget->setColumnCount(5); //设置列数为5

    tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);//禁止编辑
    connect(tableWidget->horizontalHeader(),&QHeaderView::sectionClicked,this,[=](int column){
        if(m_ListBl.at(column)){
            tableWidget->sortByColumn(column,Qt::AscendingOrder);
        }else{
            tableWidget->sortByColumn(column,Qt::DescendingOrder);
        }
        tableWidget->setSortingEnabled(true);
        m_ListBl[column]=!m_ListBl[column];
    });

   tableWidget->setWindowTitle("QTableWidget & Item");
   tableWidget->resize(size());

   QStringList header;
   header<<"排名"<<"战队"<<"胜率"<<"积分";//标题
   tableWidget->setHorizontalHeaderLabels(header);
   //初始化,为后面排序做准备
   for (int i=0;i<4;i++) {
       m_ListBl.append(false);
   }
   QStringList listName;//战队
   listName<<"WBG"<<"V5"<<"EDG"<<"RNG"<<"LNG"
          <<"TES"<<"JDG"<<"BLG"<<"RA"<<"OMG";
   QList<int> listScore;
   listScore<<9<<9<<8<<8<<8
       <<7<<7<<7<<6<<5;
   QList<int> listTotal;//已打场数
   listTotal<<11<<11<<11<<11<<11
           <<11<<12<<12<<11<<12;
   QList<int> listWin;//胜场
   listWin<<9<<9<<8<<8<<8
         <<7<<7<<7<<6<<5;

   //初始化表格数据
   for (int i=0;i<10;i++){
       //排名
       QTableWidgetItem* pItem = new QTableWidgetItem;
       pItem->setData(Qt::EditRole, i+1);
       tableWidget->setItem(i,0,pItem);
       if(i<3){
           pItem->setIcon(
                 QIcon(QPixmap(QString(":/image/%1.png").arg(i+1)).scaled(QSize(24,24))));
       }
       pItem->setTextAlignment(Qt::AlignCenter);
       //战队名
       tableWidget->setItem(i,1,new QTableWidgetItem(listName.at(i)));
       tableWidget->item(i,1)->setTextAlignment(Qt::AlignCenter);
       if(i==0){
           tableWidget->item(i,1)->setIcon(
                       QIcon(QPixmap(":/image/wbg.png").scaled(QSize(24,24))));
       }else if(i==1){
           tableWidget->item(i,1)->setIcon(
                       QIcon(QPixmap(":/image/v5.png").scaled(QSize(24,24))));
       }else if(i==2){
           tableWidget->item(i,1)->setIcon(
                       QIcon(QPixmap(":/image/edg.png").scaled(QSize(24,24))));
       }
       //胜率
       tableWidget->setCellWidget(i, 2, getBar(listWin.at(i),listTotal.at(i)));
       QTableWidgetItem* pItem_win = new QTableWidgetItem;
       pItem_win->setData(Qt::EditRole, listWin.at(i)*100/listTotal.at(i));
       tableWidget->setItem(i,2,pItem_win);
       pItem_win->setTextAlignment(Qt::AlignCenter);
       //积分
       QTableWidgetItem* pItem_score = new QTableWidgetItem;
       pItem_score->setData(Qt::EditRole, listScore.at(i));
       tableWidget->setItem(i,3,pItem_score);
       pItem_score->setTextAlignment(Qt::AlignCenter);
   }

   tableWidget->show();
}

MainWindow::~MainWindow()
{
    delete ui;
}
//设置进度条
QProgressBar* MainWindow::getBar(int percent,int total)
{
    QProgressBar *bar = new QProgressBar;
    bar->setRange(0, total);
    bar->setValue(percent);
    QColor bgColor = QColor(255, 255, 255);

    QColor chunkColor1 = QColor(100, 184, 255);
    QColor chunkColor2 = QColor(24, 189, 155);
    QColor chunkColor3 = QColor(255, 107, 107);

    QColor textColor1 = QColor(10, 10, 10);
    QColor textColor2 = QColor(255, 255, 255);
    QColor textColor3 = QColor(255, 255, 255);[添加链接描述](https://download.csdn.net/download/kchmmd/83456262)

    //进度条样式
    QString qss = QString("QProgressBar{background:%1;border-width:0px;border-radius:0px;text-align:center;}"
                              "QProgressBar::chunk{border-radius:0px;}").arg(bgColor.name());

    if (percent*100/total < 50) {
        qss += QString("QProgressBar{color:%1;}"
                       "QProgressBar::chunk{background:%2;}").arg(textColor1.name()).arg(chunkColor1.name());
    } else if (percent*100/total < 80) {
        qss += QString("QProgressBar{color:%1;}"
                       "QProgressBar::chunk{background:%2;}").arg(textColor2.name()).arg(chunkColor2.name());
    } else {
        qss += QString("QProgressBar{color:%1;}"
                       "QProgressBar::chunk{background:%2;}").arg(textColor3.name()).arg(chunkColor3.name());
    }

    bar->setStyleSheet(qss);
    return bar;
}

源码

点击此处下载源码

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-08 22:10:02  更:2022-03-08 22:14:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:48:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码