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

 StatData.h

#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 

#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();
}

用户查询结果 

 

管理员查询结果 

 

新手!请勿喷。谢谢! 

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丘不落

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值