结构:
![](https://i-blog.csdnimg.cn/blog_migrate/693336fd6f2868dc2d1cf3b4d14eff38.png)
第一步
.pro文件中添加sql
![](https://i-blog.csdnimg.cn/blog_migrate/30f6dd3fe65afe913f3afdd519ce42ef.jpeg)
第二步
UI界面
![](https://i-blog.csdnimg.cn/blog_migrate/1686beab8b4b576f2c7280098817bede.png)
第三步
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QtSql>
#include <QSqlDatabase>
#include <QMessageBox>
#include <QSqlQuery>
#include <QSqlError>
#include <QDebug>
#include <QDesktopServices>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
void Creat_table();
private slots:
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
QSqlDatabase db;
};
#endif // MAINWINDOW_H
第四步
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("127.0.0.1");
db.setPort(3306);
db.setUserName("root");
db.setPassword("123456");
db.setDatabaseName("excelTest");//第一次运行else语句,此句注释,以后此句需要放出来
bool ok = db.open();
if (!ok)
qDebug()<<"error open database because"<<db.lastError().text();
//else语句仅在最开始运行,运行一次后,数据库名创建完成,以后每次运行注释掉
// else
// {
// db.exec("CREATE DATABASE IF NOT EXISTS excelTest");
// db.setDatabaseName("excelTest");
// //关闭数据库重新打开保证设置数据库名字生效
// db.close();
// if (!db.open())
// {
// qDebug()<<"Mysql数据库重启失败";
// }
// Creat_table();
// }
}
MainWindow::~MainWindow()
{
delete ui;
}
//创建表test
void MainWindow::Creat_table()
{
QSqlQuery query;
QString str="CREATE TABLE `test`\
(num_1 int(11) NULL DEFAULT NULL,\
num_2 int(11) NULL DEFAULT NULL,\
num_3 int(11) NULL DEFAULT NULL,\
num_4 int(11) NULL DEFAULT NULL,\
id int(11) NOT NULL, PRIMARY KEY (`id`) USING BTREE\
);";
query.prepare(str);
if(!query.exec()){
qDebug()<<"query error :"<<query.lastError();
}
else{
qDebug()<<"creat table success!";
}
}
//将数据库数据导出为CSV格式
void MainWindow::on_pushButton_clicked()
{
qDebug()<<"开始3";
QStringList data;
QSqlQuery query;
QStringList lineData;
QString fileData;
int count=1;
query.exec("select num_1,num_2,num_3,num_4 from test");
//把数据存入表格里面
while(query.next())
{
QString index=QString::number(count);
data.append(index);
data.append(query.value("num_1").toString());
data.append(query.value("num_2").toString());
data.append(query.value("num_3").toString());
data.append(query.value("num_4").toString());
count++;
}
qDebug()<<data.length()<<count;
for(int i=0;i<data.length();i+=5){
lineData.clear();
lineData.append(data[i]);
lineData.append(data[i+1]);
lineData.append(data[i+2]);
lineData.append(data[i+3]);
lineData.append(data[i+4]);
fileData+=lineData.join(',')+"\n";//每列数据以“,”分割,每行以“\n”分割
}
//创建表单
QStringList tableHead;
tableHead.append("序号");
tableHead.append("数字一");
tableHead.append("数字二");
tableHead.append("数字三");
tableHead.append("数字四");
QString tableHeadStr=tableHead.join(',')+"\n";
QString path= QFileDialog::getSaveFileName(nullptr,tr("导出数据"), "/",
tr("csv File (*.csv)"));
if(path.isEmpty())return;
QFile outFile(path);
outFile.open(QIODevice::WriteOnly| QIODevice::Text);
QTextStream streamFileOut(&outFile);
streamFileOut.setCodec("GBK");
streamFileOut << tableHeadStr<<fileData;
streamFileOut.flush();
outFile.close();
fileData.clear();
QDesktopServices::openUrl(QUrl::fromLocalFile(path));
}
效果
数据库数据
![](https://i-blog.csdnimg.cn/blog_migrate/a3cb89d91a7441ec58d9640132832cc7.png)
导出数据
![](https://i-blog.csdnimg.cn/blog_migrate/29581755a4a23f394253daba4279866b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5e02454567b9c18efde148a4a3e00014.png)