Qt: 学生信息管理里系统,QTreewidget、QTableView实现

2023-10-08 17:58

本文主要是介绍Qt: 学生信息管理里系统,QTreewidget、QTableView实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

//源码下载地址: http://download.csdn.net/detail/rl529014/9666234                                         

C++、Qt学习交流群: 302558294(欢迎你的加入)

需求:

做一个简单的产品信息管理界面,能够新增,修改,删除产品信息;(所有数据均保存在内存中)

a.学生信息包括(姓名,学校(金牛小学,青羊小学),班级(1班,2班,3班),年龄,性别,身高,政治面貌,个人描述(不超过300字符)

b.界面左边采用QTreeWidget或相关控件显示学校、班级两级信息;

c.界面右边使用QListWidget或相关控件显示选中班级所有成员信息;

d.新增,修改,删除功能均使用菜单来完成;


程序界面展示:

(很多功能还不完善,本例仅供参考,欢迎大家补充)



所用技术:

1、实现自定义委托。

2、QTreewidget、QTableView,

3、MVC模式。

4、菜单栏的功能都可以在对应的控件上右击,弹出快捷菜单。

5、界面布局。


代码:

//main.cpp

<span style="font-size:14px;">#include <QApplication>
#include "widget.h"int main(int argc, char *argv[])
{QApplication a(argc, argv);StuInfoManagementSystem w;w.show();return a.exec();
}
</span>


//widget.h

<span style="font-size:14px;">#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QStandardItemModel>
#include <QTableView>
#include <QMenu>
#include <QAction>
#include <QMenuBar>
#include <QTreeView>
#include <QTreeWidget>
#include <QStandardItem>
#include "controldelegate.h"class SpinboxDelegate;
class ComboboxDelegate;//namespace Ui {
//class StuInfoManagementSystem;
//}class StuInfoManagementSystem: public QWidget
{Q_OBJECTpublic:explicit StuInfoManagementSystem(QWidget *parent = 0);~StuInfoManagementSystem();public:void contextMenuEvent(QContextMenuEvent *e);void menuBarInit(); //菜单初始化void tableWidgetInit(); //table控件初始化void treeWidgetInit();void closeEvent(QCloseEvent *event);//程序关闭时触发void upDateTableView();private:QMenu *OperationMenu;  //操作菜单QAction *DeleteAction;QAction *InsertAction;QMenu *helpMenu; //帮助菜单QAction *aboutAction;QAction *aboutQtAction;QMenu *schoolAndGradeMenu;QAction *addSchoolAction;QAction *addGradeAction;QAction *delSchoolOrGradeAction;QMenuBar* menuBar;SpinboxDelegate* ageSpinbox;//年龄SpinboxDelegate* heightSpinbox; //身高ComboboxDelegate* schoolCombobox;//学校ComboboxDelegate* gradeCombobox;//班级ComboboxDelegate* sexCombobox; //性别ComboboxDelegate* statusCombobox; //政治面貌private slots:void sltInsertAction();void sltDeleteAction();void sltAddSchoolAction();void sltAddGradeAction();void sltDelSchoolOrGradeAction();void sltAboutAction();void SlotItemClicked(QTreeWidgetItem *item, int column);private:QStandardItemModel* tableModel;QTableView* table;QStandardItem *dataSources;QTreeWidget *treeWidget;//private:
//    Ui::StuInfoManagementSystem *ui;
};#endif // WIDGET_H
</span>

//widget.cpp

<span style="font-size:14px;">#include <QSplitter>
#include <QFileSystemModel>
#include <QTreeView>
#include <QListView>
#include <QVBoxLayout>
#include <QAbstractItemModel>
#include <QTableView>
#include <QMenuBar>
#include <QVBoxLayout>
#include <QDebug>
#include <QTreeWidgetItem>
#include <controldelegate.h>
#include <QToolTip>
#include <QAbstractItemView>
#include <QStandardItem>
#include <QList>
#include <QStandardItem>
#include <QMessageBox>
#include <QInputDialog>
#include "widget.h"
#include "ui_widget.h"StuInfoManagementSystem::StuInfoManagementSystem(QWidget *parent) : QWidget(parent)/*,ui(new Ui::StuInfoManagementSystem)*/
{setMinimumSize(1200,400);menuBarInit();//菜单初始化tableWidgetInit(); //table初始化treeWidgetInit(); //tree初始化QGridLayout *grid = new QGridLayout;grid->addWidget(menuBar,0,0,1,2);grid->addWidget(treeWidget,1,0);grid->addWidget(table,1,1);setLayout(grid);showMaximized();
}StuInfoManagementSystem::~StuInfoManagementSystem()
{//delete ui;
}void StuInfoManagementSystem::contextMenuEvent(QContextMenuEvent *e) //重写上下文事件
{//方法一if(table->hasFocus()){OperationMenu->move(cursor().pos());OperationMenu->show();}if(treeWidget->hasFocus()){schoolAndGradeMenu->move(cursor().pos());schoolAndGradeMenu->show();}//方法二//    {//        table->addAction(InsertAction);//        table->addAction(DeleteAction);//        table->setContextMenuPolicy(Qt::ActionsContextMenu);//    }
}void StuInfoManagementSystem::menuBarInit()
{menuBar = new QMenuBar(0);OperationMenu = new QMenu(QString::fromLocal8Bit("学生"));DeleteAction = new QAction(QString::fromLocal8Bit("删除"));InsertAction = new QAction(QString::fromLocal8Bit("插入"));OperationMenu->addAction(DeleteAction);OperationMenu->addAction(InsertAction);helpMenu = new QMenu(QString::fromLocal8Bit("帮助"));aboutAction = new QAction(QString::fromLocal8Bit("关于软件"));aboutQtAction = new QAction(QString::fromLocal8Bit("关于Qt"));helpMenu->addAction(aboutAction);helpMenu->addAction(aboutQtAction);schoolAndGradeMenu = new QMenu(QString::fromLocal8Bit("学校/班级"));addSchoolAction = new QAction(QString::fromLocal8Bit("添加 学校"));addGradeAction = new QAction(QString::fromLocal8Bit("添加 班级"));delSchoolOrGradeAction = new QAction(QString::fromLocal8Bit("删除"));schoolAndGradeMenu->addAction(addSchoolAction);schoolAndGradeMenu->addAction(addGradeAction);schoolAndGradeMenu->addAction(delSchoolOrGradeAction);menuBar->addMenu(schoolAndGradeMenu);menuBar->addMenu(OperationMenu);menuBar->addMenu(helpMenu);connect(InsertAction,SIGNAL(triggered(bool)),SLOT(sltInsertAction()));connect(DeleteAction,SIGNAL(triggered(bool)),SLOT(sltDeleteAction()));connect(addSchoolAction,SIGNAL(triggered(bool)),SLOT(sltAddSchoolAction()));connect(addGradeAction,SIGNAL(triggered(bool)),SLOT(sltAddGradeAction()));connect(delSchoolOrGradeAction,SIGNAL(triggered(bool)),SLOT(sltDelSchoolOrGradeAction()));connect(aboutAction,SIGNAL(triggered(bool)),SLOT(sltAboutAction()));connect(aboutQtAction,SIGNAL(triggered(bool)),qApp,SLOT(aboutQt()));}void StuInfoManagementSystem::tableWidgetInit()
{//tableview初始化{table  = new QTableView;tableModel = new QStandardItemModel;table->setModel(tableModel);tableModel->setHorizontalHeaderItem(0,new QStandardItem(QString::fromLocal8Bit("姓名")));tableModel->setHorizontalHeaderItem(1,new QStandardItem(QString::fromLocal8Bit("学校")));tableModel->setHorizontalHeaderItem(2,new QStandardItem(QString::fromLocal8Bit("班级")));tableModel->setHorizontalHeaderItem(3,new QStandardItem(QString::fromLocal8Bit("年龄")));tableModel->setHorizontalHeaderItem(4,new QStandardItem(QString::fromLocal8Bit("性别")));tableModel->setHorizontalHeaderItem(5,new QStandardItem(QString::fromLocal8Bit("身高")));tableModel->setHorizontalHeaderItem(6,new QStandardItem(QString::fromLocal8Bit("政治面貌")));tableModel->setHorizontalHeaderItem(7,new QStandardItem(QString::fromLocal8Bit("个人描述")));// 姓名,学校(金牛小学,青羊小学),班级(1班,2班,3班),年龄,性别,身高,政治面貌,个人描述(不超过300字符)table->setModel(tableModel);table->horizontalHeader()->setStretchLastSection(true);table->setItemDelegateForColumn(1, new ComboboxDelegate);table->setItemDelegateForColumn(2,new ComboboxDelegate);table->setItemDelegateForColumn(3,new SpinboxDelegate(3));table->setItemDelegateForColumn(4,new ComboboxDelegate);table->setItemDelegateForColumn(5,new SpinboxDelegate(5));table->setItemDelegateForColumn(6,new ComboboxDelegate);table->setEditTriggers(QAbstractItemView::DoubleClicked);table->setSelectionBehavior(QAbstractItemView::SelectRows);}
}void StuInfoManagementSystem::treeWidgetInit()
{treeWidget = new QTreeWidget;treeWidget->setMaximumWidth(200);treeWidget->setHeaderLabel(QString::fromLocal8Bit("学校/班级"));QTreeWidgetItem *qingYang = new  QTreeWidgetItem;qingYang->setText(0,QString::fromLocal8Bit("青羊小学"));QTreeWidgetItem  *jinNiu = new QTreeWidgetItem;jinNiu->setText(0,QString::fromLocal8Bit("金牛小学"));QStringList classlist;classlist << QString::fromLocal8Bit("1班") << QString::fromLocal8Bit("2班")<< QString::fromLocal8Bit("3班");for(int i=0;i<=2;i++){QTreeWidgetItem *tmp_qingYang = new  QTreeWidgetItem(qingYang);tmp_qingYang->setText(0,classlist.at(i));qingYang->addChild(tmp_qingYang);QTreeWidgetItem  *tmp_jinNiu = new QTreeWidgetItem(jinNiu);tmp_jinNiu->setText(0,classlist.at(i));jinNiu->addChild(tmp_jinNiu);}treeWidget->insertTopLevelItem(0,qingYang);treeWidget->insertTopLevelItem(1,jinNiu);connect(treeWidget,SIGNAL(itemPressed(QTreeWidgetItem *, int)),SLOT(SlotItemClicked(QTreeWidgetItem *, int)));
}void StuInfoManagementSystem::closeEvent(QCloseEvent *event)
{qDebug()<<"Application close";
}void StuInfoManagementSystem::sltInsertAction() //插入行操作
{QList<QStandardItem*> item;item.append(new QStandardItem(NULL));item.append(new QStandardItem(NULL));item.append(new QStandardItem(NULL));item.append(new QStandardItem(NULL));item.append(new QStandardItem(NULL));item.append(new QStandardItem(NULL));item.append(new QStandardItem(NULL));item.append(new QStandardItem(NULL));item.at(0)->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter); //设置指定项的对齐方式item.at(7)->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);tableModel->insertRow(tableModel->rowCount(),item);
}void StuInfoManagementSystem::sltDeleteAction() //删除指定行操作
{int curreantRow = table->currentIndex().row(); //获取当前行数tableModel->removeRow(curreantRow);
}void StuInfoManagementSystem::sltAddSchoolAction()
{bool ok;QString text = QInputDialog::getText(this,"Please Input School Name",tr("School name:"),QLineEdit::Normal,tr(""),&ok);if(ok && !text.isEmpty()){QTreeWidgetItem *item = new QTreeWidgetItem;item->setText(0,text);int schoolCount = treeWidget->topLevelItemCount();treeWidget->insertTopLevelItem(schoolCount,item);}
}void StuInfoManagementSystem::sltAddGradeAction()
{if(treeWidget->currentItem()){bool ok;QString text = QInputDialog::getText(this,"Please Input Grade Name",tr("Grade name:"),QLineEdit::Normal,tr(""),&ok);if(ok && !text.isEmpty()){QTreeWidgetItem *item = new QTreeWidgetItem;item->setText(0,text);if(treeWidget->currentItem()->parent())//当前选中的是班级{for(int i = 0; i< treeWidget->currentItem()->parent()->childCount(); i++) //同一个学校的班级不能重复{if(treeWidget->currentItem()->parent()->child(i)->text(0) == text){QMessageBox::information(this, QString::fromLocal8Bit("警告"),QString::fromLocal8Bit("%1 已经存在").arg(text));return;}}treeWidget->currentItem()->parent()->addChild(item);}else{for(int i = 0; i< treeWidget->currentItem()->childCount(); i++) //同一个学校的班级不能重复{if(treeWidget->currentItem()->child(i)->text(0) == text){QMessageBox::information(this, QString::fromLocal8Bit("警告"),QString::fromLocal8Bit("%1 已经存在").arg(text));return;}}treeWidget->currentItem()->addChild(item);}}}treeWidget->expandAll();
}void StuInfoManagementSystem::sltDelSchoolOrGradeAction()
{QTreeWidgetItem *item = treeWidget->currentItem();if(!item->parent()){treeWidget->takeTopLevelItem(treeWidget->indexOfTopLevelItem(treeWidget->currentItem()));}else{QTreeWidgetItem *parent = item->parent();if(parent){parent->removeChild(item);}}
}void StuInfoManagementSystem::sltAboutAction()
{QMessageBox::about(this, tr("About Aoftware"),tr("Make By Hero"));
}void StuInfoManagementSystem::SlotItemClicked(QTreeWidgetItem *item, int column)
{//学校1,班级2 if(item->parent()) //当前item为子项{for(int row = 0; row <= tableModel->rowCount();row++){if(item->text(column) == tableModel->data(tableModel->index(row,2)).toString())  //班级{if(item->parent()->text(column) ==tableModel->data(tableModel->index(row,1)).toString()) //学校table->setRowHidden(row,false);elsetable->setRowHidden(row,true);}else{table->setRowHidden(row,true);}}}else //当前点击的item为父项{if(item->text(column) == QString::fromLocal8Bit("青羊小学")){for(int row = 0; row <= tableModel->rowCount();row++){if(tableModel->data(tableModel->index(row,1)).toString() != QString::fromLocal8Bit("青羊小学"))table->setRowHidden(row,true);elsetable->setRowHidden(row,false);}}else if(item->text(column) == QString::fromLocal8Bit("金牛小学")){for(int row = 0; row <= tableModel->rowCount();row++){if(tableModel->data(tableModel->index(row,1)).toString() != QString::fromLocal8Bit("金牛小学"))table->setRowHidden(row,true);elsetable->setRowHidden(row,false);}}}
}
</span>

//controldelegate

<span style="font-size:14px;">#ifndef CONTROLDELEGATE_H
#define CONTROLDELEGATE_H
#include <QItemDelegate>
#include <QObject>class SpinboxDelegate : public QItemDelegate  //年龄
{Q_OBJECTpublic:SpinboxDelegate(int column);QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;//void setEditorData(QWidget *editor, const QModelIndex &index) const ;void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const ;void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;//void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const;private slots:void commitAndCloseEditor();private:int mColumn;
};class ComboboxDelegate : public QItemDelegate  //学校
{Q_OBJECTpublic:ComboboxDelegate();QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;private slots:void commitAndCloseEditor();
};#endif // CONTROLDELEGATE_H
</span>

//controldelegate.cpp

<span style="font-size:14px;">#include <QSpinBox>
#include <QComboBox>
#include <QDebug>
#include <QApplication>
#include <QStyleOptionViewItem>
#include <QDomDocument>
#include <QFile>
#include <QTextStream>
#include "controldelegate.h"
SpinboxDelegate::SpinboxDelegate(int column)
{mColumn = column;
}//为指定的列或者行创建部件
QWidget *SpinboxDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option,const QModelIndex &index) const
{if(index.column() ==3) //年龄{QSpinBox *editor = new QSpinBox(parent);editor->setRange(1,110);connect(editor,SIGNAL(editingFinished()),SLOT(commitAndCloseEditor()));return editor;}else if( index.column() == 5) //身高{QSpinBox *editor = new QSpinBox(parent);editor->setRange(120,220);connect(editor,SIGNAL(editingFinished()),SLOT(commitAndCloseEditor()));return editor;}else{return QItemDelegate::createEditor(parent,option,index);}
}//显示格式控制
void SpinboxDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{if(index.column()== 5){int age = index.model()->data(index,Qt::DisplayRole).toInt();QString text = QString("%1 CM").arg(age,3,10,QChar(' '));QStyleOptionViewItem myOption = option;myOption.displayAlignment = Qt::AlignRight | Qt::AlignVCenter;drawDisplay(painter,myOption,myOption.rect,text);drawFocus(painter,myOption,myOption.rect);}else if(index.column() == 3){int height = index.model()->data(index,Qt::DisplayRole).toInt();QString text = QString("%1 Year").arg(height,3,10,QChar(' '));QStyleOptionViewItem myOption = option;myOption.displayAlignment = Qt::AlignRight | Qt::AlignVCenter;drawDisplay(painter,myOption,myOption.rect,text);drawFocus(painter,myOption,myOption.rect);}
}void SpinboxDelegate::commitAndCloseEditor()
{QSpinBox *editor = qobject_cast<QSpinBox*>(sender());emit commitData(editor);emit closeEditor(editor);
}//void SpinboxDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
//{//}void SpinboxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{QSpinBox *spinBox = static_cast<QSpinBox*>(editor);spinBox->interpretText();int value = spinBox->value();model->setData(index, value, Qt::EditRole);
}ComboboxDelegate::ComboboxDelegate()
{}QWidget *ComboboxDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{QComboBox *editor = new QComboBox(parent);if(index.column() == 1){editor->addItem(QString::fromLocal8Bit("青羊小学"));editor->addItem(QString::fromLocal8Bit("金牛小学"));editor->setCurrentIndex(0);connect(editor,SIGNAL(editingFinished()),SLOT(commitAndCloseEditor()));return editor;}else if(index.column() == 2){editor->addItem(QString::fromLocal8Bit("1班"));editor->addItem(QString::fromLocal8Bit("2班"));editor->addItem(QString::fromLocal8Bit("3班"));editor->setCurrentIndex(0);connect(editor,SIGNAL(editingFinished()),SLOT(commitAndCloseEditor()));return editor;}else if(index.column() == 4){editor->addItem(QString::fromLocal8Bit("男"));editor->addItem(QString::fromLocal8Bit("女"));editor->setCurrentIndex(0);connect(editor,SIGNAL(editingFinished()),SLOT(commitAndCloseEditor()));return editor;}else if(index.column() == 6){editor->addItem(QString::fromLocal8Bit("群众"));editor->addItem(QString::fromLocal8Bit("共青团员"));editor->addItem(QString::fromLocal8Bit("共产党员"));editor->setCurrentIndex(0);connect(editor,SIGNAL(editingFinished()),SLOT(commitAndCloseEditor()));return editor;}else{QItemDelegate::createEditor(parent,option,index);}
}void ComboboxDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{if(index.column() == 1 || index.column() == 2 ||index.column() == 4 ||index.column() == 6){QString text = index.model()->data(index , Qt::DisplayRole).toString();QStyleOptionViewItem myOption = option;myOption.displayAlignment = Qt::AlignRight | Qt::AlignVCenter;drawDisplay(painter,myOption,myOption.rect,text);drawFocus(painter,myOption,myOption.rect);}else{QItemDelegate::paint(painter,option,index);}
}void ComboboxDelegate::commitAndCloseEditor()
{QComboBox *editor = qobject_cast<QComboBox*>(sender());emit commitData(editor);emit closeEditor(editor);
}
</span>

这篇关于Qt: 学生信息管理里系统,QTreewidget、QTableView实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/167018

相关文章

Spring Boot整合Redis注解实现增删改查功能(Redis注解使用)

《SpringBoot整合Redis注解实现增删改查功能(Redis注解使用)》文章介绍了如何使用SpringBoot整合Redis注解实现增删改查功能,包括配置、实体类、Repository、Se... 目录配置Redis连接定义实体类创建Repository接口增删改查操作示例插入数据查询数据删除数据更

Java Lettuce 客户端入门到生产的实现步骤

《JavaLettuce客户端入门到生产的实现步骤》本文主要介绍了JavaLettuce客户端入门到生产的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目录1 安装依赖MavenGradle2 最小化连接示例3 核心特性速览4 生产环境配置建议5 常见问题

linux ssh如何实现增加访问端口

《linuxssh如何实现增加访问端口》Linux中SSH默认使用22端口,为了增强安全性或满足特定需求,可以通过修改SSH配置来增加或更改SSH访问端口,具体步骤包括修改SSH配置文件、增加或修改... 目录1. 修改 SSH 配置文件2. 增加或修改端口3. 保存并退出编辑器4. 更新防火墙规则使用uf

Java 的ArrayList集合底层实现与最佳实践

《Java的ArrayList集合底层实现与最佳实践》本文主要介绍了Java的ArrayList集合类的核心概念、底层实现、关键成员变量、初始化机制、容量演变、扩容机制、性能分析、核心方法源码解析、... 目录1. 核心概念与底层实现1.1 ArrayList 的本质1.1.1 底层数据结构JDK 1.7

C++中unordered_set哈希集合的实现

《C++中unordered_set哈希集合的实现》std::unordered_set是C++标准库中的无序关联容器,基于哈希表实现,具有元素唯一性和无序性特点,本文就来详细的介绍一下unorder... 目录一、概述二、头文件与命名空间三、常用方法与示例1. 构造与析构2. 迭代器与遍历3. 容量相关4

C++中悬垂引用(Dangling Reference) 的实现

《C++中悬垂引用(DanglingReference)的实现》C++中的悬垂引用指引用绑定的对象被销毁后引用仍存在的情况,会导致访问无效内存,下面就来详细的介绍一下产生的原因以及如何避免,感兴趣... 目录悬垂引用的产生原因1. 引用绑定到局部变量,变量超出作用域后销毁2. 引用绑定到动态分配的对象,对象

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符