您的位置:首页 > 编程语言 > Qt开发

Qt sqlite多条件查询插入QTableWidget表格(记录备份以防忘记,新手!)

2020-02-17 03:07 423 查看

 StatData.h

[code]#pragma once

/*
注意:
使用QChartView提升为QChart
添加头文件#include <QChart>,
和添加using namespace QtCharts;
必须声明再#include "ui_MQSoftwareFramework.h"前面,
不然会报错。
*/
#include <QDialog>
#include <QChartView>
#include <QChart>
using namespace QtCharts;

#include "ui_StatData.h"

/*
数据库头文件
*/
#include <qsql.h>
#include <qsqldatabase.h>
#include <qsqlerror.h>
#include <qsqlquery.h>
#include <qsqldriver.h>
#include "database.h"
#include <QBarSet>
#include <QBarSeries>
#include <QValueAxis>

class StatData : public QDialog
{
Q_OBJECT

public:
StatData(QWidget *parent = Q_NULLPTR);
~StatData();

QString permission;
void setTableWidget(QString str);
private:
qlonglong m_statOKTotal;
qlonglong m_statNGTotal;
qlonglong m_statTBATotal;

private slots:
void on_Exitbtn_clicked();//退出按钮
void on_Querybtn_clicked();//查询按钮

private slots:
void ModelLoad();  //加载型号
void setTimer();   //时间设置
void iniBarChart(); //曲线图加载
void buildBarChart();

private:
Ui::StatData ui;
};

StatData.cpp 

[code]#include "StatData.h"
#include <QMessageBox>
#include <qdebug.h>

#pragma execution_character_set("utf-8")

StatData::StatData(QWidget *parent)
: QDialog(parent)
{
ui.setupUi(this);
//去掉问号
Qt::WindowFlags flags = Qt::Dialog; flags |= Qt::WindowCloseButtonHint;
setWindowFlags(flags);

m_statOKTotal = 0;
m_statNGTotal = 0;
m_statTBATotal = 0;

iniBarChart();
buildBarChart();
ModelLoad();
setTimer();
setTableWidget(permission);
}

StatData::~StatData()
{
}

/*
加载型号
*/
void StatData::ModelLoad()
{
ui.comboBox->clear();
ui.comboBox->addItem(QStringLiteral(""));

QString select_all_sql = "select * from OtherP";
QSqlQuery sql_query;//QSqlQuery类提供执行和操作的SQL语句的方法

//查询所有记录
sql_query.prepare(select_all_sql);
if (!sql_query.exec())
{
qDebug() << sql_query.lastError();//查询失败
}
else
{
//检索下一个
while (sql_query.next())
{
QString id = sql_query.value(0).toString();
double inradiumMin = sql_query.value(1).toDouble();
double inradiumMax = sql_query.value(2).toDouble();
double outerMin = sql_query.value(3).toDouble();
double outerMax = sql_query.value(4).toDouble();
double inradiumMin_Calibration = sql_query.value(5).toDouble();
double inradiumMax_Calibration = sql_query.value(6).toDouble();
double inradiumMin_Correction = sql_query.value(7).toDouble();
double inradiumMax_Correction = sql_query.value(8).toDouble();
double outerMin_Calibration = sql_query.value(9).toDouble();
double outerMax_Correction = sql_query.value(10).toDouble();

ui.comboBox->addItem(id);
}
}
}

/*
表格设置
*/
void StatData::setTableWidget(QString str)
{
//根据用户权限来设置表格显示
permission = str;
if (str == "管理员")
{
QStringList headers;
headers << ("ID") << ("型号") << ("开始时间") << ("OK数") << ("NG数") << ("TBA数") << ("总数") << ("用户名") << ("结束时间");
qDebug() << str;
ui.tableWidget->setColumnCount(9);
ui.tableWidget->setHorizontalHeaderLabels(headers);
ui.tableWidget->horizontalHeader()->setHidden(false);//设置表头可见
ui.tableWidget->setShowGrid(true);
ui.tableWidget->verticalHeader()->setHidden(true);
ui.tableWidget->setColumnWidth(0, 65);
ui.tableWidget->setColumnWidth(1, 120);
ui.tableWidget->setColumnWidth(2, 165);
ui.tableWidget->setColumnWidth(3, 45);
ui.tableWidget->setColumnWidth(4, 45);
ui.tableWidget->setColumnWidth(5, 45);
ui.tableWidget->setColumnWidth(6, 55);
ui.tableWidget->setColumnWidth(7, 67);
ui.tableWidget->setColumnWidth(8, 165);
ui.tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);//设置单元格不可编辑
}
else
{
QStringList headers;
headers << ("ID") << ("型号") << ("开始时间") << ("OK数") << ("NG数") << ("TBA数") << ("总数")<< ("结束时间");
qDebug() << str;
ui.tableWidget->setColumnCount(8);
ui.tableWidget->setHorizontalHeaderLabels(headers);
ui.tableWidget->horizontalHeader()->setHidden(false);//设置表头可见
ui.tableWidget->setShowGrid(true);
ui.tableWidget->verticalHeader()->setHidden(true);
ui.tableWidget->setColumnWidth(0, 70);
ui.tableWidget->setColumnWidth(1, 142);
ui.tableWidget->setColumnWidth(2, 180);
ui.tableWidget->setColumnWidth(3, 50);
ui.tableWidget->setColumnWidth(4, 50);
ui.tableWidget->setColumnWidth(5, 50);
ui.tableWidget->setColumnWidth(6, 50);
ui.tableWidget->setColumnWidth(7, 180);
ui.tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);//设置单元格不可编辑
}
}

/*
时间设置
*/
void StatData::setTimer()
{
//查询时间条件设置
ui.startTimeEdit->setMinimumDate(QDate::currentDate().addDays(-365));//限制时间在365天
ui.startTimeEdit->setMaximumDate(QDate::currentDate().addDays(365));
ui.startTimeEdit->setDate(QDate::currentDate());//开始时间,获取日期显示

ui.endTimeEdit->setMinimumDate(QDate::currentDate().addDays(-365));
ui.endTimeEdit->setMaximumDate(QDate::currentDate().addDays(365));
ui.endTimeEdit->setDate(QDate::currentDate());
QTime maxTime = ui.endTimeEdit->maximumTime();//结束时间获取最大时间显示
ui.endTimeEdit->setTime(maxTime);

}

/*
柱状图初始化
*/
void StatData::iniBarChart()
{
QChart *chart = new QChart(); //创建chart
chart->setTitle("表面缺陷曲线");
chart->setAnimationOptions(QChart::SeriesAnimations);
ui.chartViewBar->setChart(chart); //为ChartView设置chart
ui.chartViewBar->setRenderHint(QPainter::Antialiasing);
}

/*
构造柱状图
*/
void StatData::buildBarChart()
{
QChart *chart = ui.chartViewBar->chart(); //获取ChartView关联的chart
chart->removeAllSeries(); //删除所有序列

chart->removeAxis(chart->axisX()); //删除坐标轴
chart->removeAxis(chart->axisY()); //删除坐标轴

//创建七个QBarSet数据集
QBarSet *setOKRate = new QBarSet("良品");
QBarSet *setNgRate = new QBarSet("不良");
QBarSet *setTbaRate = new QBarSet("待定");

setOKRate->append(m_statOKTotal);
setNgRate->append(m_statNGTotal);
setTbaRate->append(m_statTBATotal);

QBarSeries *series = new QBarSeries();
series->append(setOKRate);
series->append(setNgRate);
series->append(setTbaRate);
chart->addSeries(series); //添加柱状图序列

//数值型坐标作为纵轴
QValueAxis *axisY = new QValueAxis;
axisY->setRange(0, 100);
axisY->setTitleText("比率(%)");
axisY->setTickCount(11);//11
axisY->setLabelFormat("%.0f"); //标签格式
chart->setAxisY(axisY, series);
chart->legend()->setVisible(true); //显示图例
chart->legend()->setAlignment(Qt::AlignBottom); //图例显示在下方
}

/*
查询数据显示
*/
void StatData::on_Querybtn_clicked()
{

m_statOKTotal = 0;
m_statNGTotal = 0;
m_statTBATotal = 0;
//清空表内容
ui.tableWidget->clearContents();
ui.tableWidget->setRowCount(0);

QSqlQuery sql_query;
QString startTime = ui.startTimeEdit->text();//获取查询条件开始时间
QString endTime = ui.endTimeEdit->text();//获取查询条件结束时间
QString productCode = ui.comboBox->currentText();//获取型号

QString select_all_sql = "select * from StatisticalResults WHERE detectTime between:detectTime and:endTime and productName = :productCode";
sql_query.prepare(select_all_sql);
sql_query.bindValue(":detectTime", startTime);
sql_query.bindValue(":endTime", endTime);
sql_query.bindValue(":productCode", productCode);

if (!sql_query.exec())
{
qDebug() << sql_query.lastError();
}
else
{
while (sql_query.next())
{
//读取数据库表内容
int setID = sql_query.value(0).toInt();
QString ID = QString::number(setID);
QString m_productCode = sql_query.value(1).toString();
QString detectTime = sql_query.value(2).toString();
QString OkTotalNum = sql_query.value(3).toString();
QString NgTotalNum = sql_query.value(4).toString();
QString TbaTotalNum = sql_query.value(5).toString();
QString TotalNum = sql_query.value(6).toString();
QString Permission = sql_query.value(7).toString();
QString EndTime = sql_query.value(8).toString();

//吧数据库表内容插入到DataTable中
int RowCont;
RowCont = ui.tableWidget->rowCount();
ui.tableWidget->insertRow(RowCont);
ui.tableWidget->setItem(RowCont, 0, new QTableWidgetItem(ID));
ui.tableWidget->setItem(RowCont, 1, new QTableWidgetItem(m_productCode));
ui.tableWidget->setItem(RowCont, 2, new QTableWidgetItem(detectTime));
ui.tableWidget->setItem(RowCont, 3, new QTableWidgetItem(OkTotalNum));
ui.tableWidget->setItem(RowCont, 4, new QTableWidgetItem(NgTotalNum));
ui.tableWidget->setItem(RowCont, 5, new QTableWidgetItem(TbaTotalNum));
ui.tableWidget->setItem(RowCont, 6, new QTableWidgetItem(TotalNum));
if (permission == "管理员")//判断用户权限
{
ui.tableWidget->setItem(RowCont, 7, new QTableWidgetItem(Permission));
ui.tableWidget->setItem(RowCont, 8, new QTableWidgetItem(EndTime));
}
else
{
ui.tableWidget->setItem(RowCont, 7, new QTableWidgetItem(EndTime));
}

//查询数据出来插入到曲线图中
if (OkTotalNum == "1")
{
m_statOKTotal += 1;
}
if (NgTotalNum == "1")
{
m_statNGTotal += 1;
}
if (TbaTotalNum == "1")
{
m_statTBATotal += 1;
}
}
buildBarChart();
}
}

/*
退出
*/
void StatData::on_Exitbtn_clicked()
{
if ((QMessageBox::information(this, tr("温馨提示!"), tr("您确定退出吗?"), tr("确定"), tr("取消"))))
return;

this->close();
}

用户查询结果 

 

管理员查询结果 

 

新手!请勿喷。谢谢! 

    20000
  • 点赞
  • 收藏
  • 分享
  • 文章举报
孤殇情 发布了1 篇原创文章 · 获赞 0 · 访问量 73 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: