添加lpreport报表软件工程

jizhi
bobpan 5 years ago
parent a03a3fb76e
commit d84b1d2d51

@ -0,0 +1,391 @@
#include "DetectDataDB.h"
#include "InfoFile.h"
#include "gensql.h"
#define _MD_WARNINGTABLE "warningtable"
/*myself */
#define _MD_PRIMARY_KEY "uid"
#define _MD_TABLE_FORMS_MANE "wftable" //数据表名称
#define _MD_MODEL "model" //model 模型名称
#define _MD_DIAMETER "diameter" //直径
#define _MD_HIGHT "hight" //高度
#define _MD_CORRELATE "correlate" //相似度
#define _MD_CHANNEL "channel" //通道
#define _MD_PICPATH "picpath" //图片路径
#define _MD_ROTATE "rotate"//辐条个数
#define _MD_UPDATE_TIME "time" //最后更新的时间
#define _MD_PIC "pic" //图片
#define _MD_TIMETABLE "wftimetable_2"
#define _MD_TYPE "type"
#define _MD_STARTTIME "starttime"
#define _MD_ENDTIME "endtime"
#define _MD_TIMETYPY_S "startType"
#define _MD_TIMETYPY_E "EndType"
#define _MD_WARNINGTABLE "warningtable"
#define _MD_MESSAGE "message"
#define _MD_CLASS "class"
#define _INDEX_FORTABLE "CREATE INDEX idx_wftable ON wftable (time COLLATE BINARY ASC); "
DetectDataDB::DetectDataDB(const QString& dbName,const QString &dbType) :DataBaseSql(dbName,dbType)
{
// db = QSqlDatabase::addDatabase("QSQLITE");
// db.setDatabaseName(dbName);
// if (!dbUser.isEmpty()){
// db.setUserName(dbUser);
// db.setPassword(dbPwb);
// }
}
DetectDataDB::~DetectDataDB()
{
}
//m_value.insert("time1", "");//起始时间
//m_value.insert("time2", "");//结束时间
//m_value.insert("name", "");//模型名字
//m_value.insert("Type", "");//查询类型
QString DataBaseSql::genCheckStr(QVariantMap m_value)
{
int nType = m_value.value(_CHECK_TYPE_).toInt();
QString select_sql;
switch (nType)
{
case EMT_CHECK_BY_TIME:
{
QString time1 = m_value.value(_CHECK_TIME1_).toString();
QString strFifter = QString(" where time ='%1'").arg(time1);
int IsCount = m_value.value(_CHECK_COUNT_).toInt(0);
if (IsCount==1)
select_sql = QString("select count(*) from ") + _MD_TABLE_FORMS_MANE + strFifter;
else
select_sql = QString("select * from ") + _MD_TABLE_FORMS_MANE + strFifter;
}
break;
case EMT_CHECK_BY_NAME:
{
QString time1 = m_value.value(_CHECK_TIME1_).toString();
QString time2 = m_value.value(_CHECK_TIME2_).toString();
QString modelname = m_value.value(_CHECK_NAME_).toString();
QString strFifter = QString(" where time >'%1' and time < '%2' and model='%3'").arg(time1).arg(time2).arg(modelname);
int IsCount = m_value.value(_CHECK_COUNT_).toInt(0);
if (IsCount == 1)
select_sql = QString("select count(*) from ") + _MD_TABLE_FORMS_MANE + strFifter;
else
select_sql = QString("select * from ") + _MD_TABLE_FORMS_MANE + strFifter;
}
break;
case EMT_CHECK_BY_SAE:
{
QString time1 = m_value.value(_CHECK_TIME1_).toString();
QString time2 = m_value.value(_CHECK_TIME2_).toString();
QString checktypeStr = m_value.value("CheckType").toString();
QString strFifter = QString(" where time >'%1' and time < '%2'").arg(time1).arg(time2);
int IsCount = m_value.value(_CHECK_COUNT_).toInt(0);
if (IsCount == 1)
select_sql = QString("select count(*) from ") + _MD_TABLE_FORMS_MANE + strFifter;
else{
if (checktypeStr == "Count")
select_sql = QString("select %1 from ").arg(_MD_MODEL) + _MD_TABLE_FORMS_MANE + strFifter;
else
select_sql = QString("select * from ") + _MD_TABLE_FORMS_MANE + strFifter;
}
}
break;
case EMT_CHECK_BY_LOG:
{
QString time1 = m_value.value(_CHECK_TIME1_).toString();
QString time2 = m_value.value(_CHECK_TIME2_).toString();
int logType = m_value.value(_CHECK_LOGTYPE).toInt();
QString strFifter = QString(" where time >'%1' and time < '%2' and class = '%3' order by time desc ").arg(time1).arg(time2).arg(logType);
int IsCount = m_value.value(_CHECK_COUNT_).toInt(0);
if (IsCount == 1)
select_sql = QString("select count(*) from ") + _MD_WARNINGTABLE + strFifter;
else
select_sql = QString("select * from ") + _MD_WARNINGTABLE + strFifter;
}
break;
case EMT_CHECK_BY_COUNT:
{
QString time1 = m_value.value(_CHECK_TIME1_).toString();
QString time2 = m_value.value(_CHECK_TIME2_).toString();
QString checktypeStr = m_value.value("CheckType").toString();
QString strFifter = QString(" where time >'%1' and time < '%2'").arg(time1).arg(time2);
int IsCount = m_value.value(_CHECK_COUNT_).toInt(0);
if (IsCount == 1)
select_sql = QString("select count(*) from ") + _MD_TABLE_FORMS_MANE + strFifter;
else{
QString strGroup = QString(" GROUP BY %1 ORDER BY %2").arg(_MD_MODEL).arg(_MD_MODEL);
if (checktypeStr == "Count")
select_sql = QString("select %1 from ").arg(_MD_MODEL).arg(_MD_MODEL) + _MD_TABLE_FORMS_MANE + strFifter;// +strGroup;
else
select_sql = QString("select * from ") + _MD_TABLE_FORMS_MANE + strFifter;
}
}
break;
case EMT_CHECK_BY_UID:
{
QString uid = m_value.value(_CHECK_UID_).toString();
QString strFifter = QString(" where uid = %1 ").arg(uid);
int IsCount = m_value.value(_CHECK_COUNT_).toInt(0);
if (IsCount == 1)
select_sql = QString("select count(*) from ") + _MD_TABLE_FORMS_MANE + strFifter;
else
select_sql = QString("select * from ") + _MD_TABLE_FORMS_MANE + strFifter;
}
break;
default:
break;
}
return select_sql;
}
bool DetectDataDB::checkoutData(QVariantMap m_value, QSqlQuery &sql)
{
int nType = m_value.value(_CHECK_TYPE_).toInt();
QString select_sql;
switch (nType)
{
case EMT_CHECK_BY_TIME:
{
QString time1 = m_value.value(_CHECK_TIME1_).toString();
QString strFifter = QString(" where time ='%1'").arg(time1);
select_sql = QString("select * from ") + _MD_TABLE_FORMS_MANE + strFifter;
}
break;
case EMT_CHECK_BY_NAME:
{
QString time1 = m_value.value(_CHECK_TIME1_).toString();
QString time2 = m_value.value(_CHECK_TIME2_).toString();
QString modelname = m_value.value(_CHECK_NAME_).toString();
QString strFifter = QString(" where time >'%1' and time < '%2' and model='%3'").arg(time1).arg(time2).arg(modelname);
select_sql = QString("select * from ") + _MD_TABLE_FORMS_MANE + strFifter;
}
break;
case EMT_CHECK_BY_SAE:
{
QString time1 = m_value.value(_CHECK_TIME1_).toString();
QString time2 = m_value.value(_CHECK_TIME2_).toString();
QString strFifter = QString(" where time >'%1' and time < '%2'").arg(time1).arg(time2);
select_sql = QString("select * from ") + _MD_TABLE_FORMS_MANE + strFifter;
}
break;
case EMT_CHECK_BY_LOG:
{
QString time1 = m_value.value(_CHECK_TIME1_).toString();
QString time2 = m_value.value(_CHECK_TIME2_).toString();
int logType = m_value.value(_CHECK_LOGTYPE).toInt();
QString strFifter = QString(" where time >'%1' and time < '%2' and class = '%3' order by time desc ").arg(time1).arg(time2).arg(logType);
select_sql = QString("select * from ") + _MD_WARNINGTABLE + strFifter;
}
break;
default:
break;
}
sql = db->exec(select_sql);
return true;
}
bool DetectDataDB::checkoutData(QString selectStr, QSqlQuery &sql)
{
sql = db->exec(selectStr);
return true;
}
// bool DetectDataDB::checkoutData(QString selectStr, QSqlQuery &sql)
// {
// Q
// }
bool DetectDataDB::DelDatasByTime(QString minTime)
{
QString StrTime = QString("time <'%1'").arg(minTime);
QString select_sql = QString("DELETE FROM %1 WHERE %2").arg(_MD_TABLE_FORMS_MANE).arg(StrTime);
db->exec(select_sql);
return true;
}
bool DetectDataDB::DelAllDatas()
{
QString strSqll = QString("delete from %1 ").arg(_MD_TABLE_FORMS_MANE);
db->exec(strSqll);
strSqll = QString("delete from %1 ").arg("warningtable");
db->exec(strSqll);
return true;
}
bool DetectDataDB::DelWarnDataByCount(int model /*=1*/, int nCount/*=100000*/)
{
QString strLimit1 = QString("select count(uid) from %1 where class = '%3'").arg("warningtable").arg(model);
QString strLimit2 = QString("uid in(select uid from %1 where class = '%2' order by time desc limit(select count(uid) from %3 where class = '%4') offset %5)").arg("warningtable").arg(model).arg("warningtable").arg(model).arg(nCount);
QString strSqll = QString("delete from %1 where (%2)>%3 and %4").arg("warningtable").arg(strLimit1).arg(nCount).arg(strLimit2);
QSqlQuery sql = db->exec(strSqll);
return true;
}
bool DetectDataDB::InitDatabase()
{
if (!openDB())
{
return false;
}
QString strCheckTable = QString("select name from sqlite_master where type='table' order by name;");
QSqlQuery sql = db->exec(strCheckTable);//查询数据库中所有的数据表
QStringList tablenamelist;
while (sql.next())
{
QString strname = sql.value(0).toString();
tablenamelist.append(strname);
}
if (!tablenamelist.contains(_MD_TABLE_FORMS_MANE))//是否包含 table 否则创建新表
{
QVariantMap vDataMap;
vDataMap.insert(_MD_MODEL, "VARCHAR(32)");
vDataMap.insert(_MD_DIAMETER, "INT(100)");//直径
vDataMap.insert(_MD_HIGHT, "INT(100)");//高度
vDataMap.insert(_MD_CORRELATE, "INT(100)");//相似度
vDataMap.insert(_MD_CHANNEL, "INT(100)");
vDataMap.insert("detecttime", "VARCHAR(32)");
vDataMap.insert(_MD_UPDATE_TIME, "DATETIME(32)");
vDataMap.insert(_MD_PIC, "BLOB");
if (!CreatTable(_MD_TABLE_FORMS_MANE, _MD_PRIMARY_KEY, vDataMap))
{
//return false;
}
else
{
QString strIndex = QString("CREATE INDEX idx_wftable ON wftable (time COLLATE BINARY ASC); ");
db->exec(strIndex);//创建索引
}
}
if (!tablenamelist.contains(_MD_TIMETABLE))
{
QVariantMap vTimeMap;//保存班次时间
vTimeMap.insert(_MD_TYPE, "VARCHAR(32)");
vTimeMap.insert(_MD_STARTTIME, "VARCHAR(32)");
vTimeMap.insert(_MD_ENDTIME, "VARCHAR(32)");
vTimeMap.insert(_MD_TIMETYPY_S, "INT(100)");
vTimeMap.insert(_MD_TIMETYPY_E, "INT(100)");
if (!CreatTable(_MD_TIMETABLE, _MD_PRIMARY_KEY, vTimeMap))
{
//return false;
}
else{
}
}
if (!tablenamelist.contains(_MD_WARNINGTABLE))
{
QVariantMap vWarningMap;//报警信息
vWarningMap.insert(_MD_MESSAGE, "VARCHAR(256)");
vWarningMap.insert(_MD_CLASS, "VARCHAR(32)");
vWarningMap.insert(_MD_UPDATE_TIME, "DATETIME(32)");
if (!CreatTable(_MD_WARNINGTABLE, _MD_PRIMARY_KEY, vWarningMap))
{
//return false;
}
else{
QString strIndex = QString("CREATE INDEX idx_warningtable ON warningtable (time COLLATE BINARY ASC); ");
db->exec(strIndex);
}
}
return true;
}
bool DetectDataDB::ReadOutTimeData(QMap<QString, TimeStruct> &m_MapTimeMatch)
{
QString select_sql = QString("select * from ") + _MD_TIMETABLE;
QSqlQuery sql = db->exec(select_sql);
QSqlError err = sql.lastError();
int t = err.type();
if (t != QSqlError::NoError)
{
return false;
}
while (sql.next())
{
int nIndex = sql.value("uid").toInt();
QString type = sql.value(_MD_TYPE).toString();
QTime start = sql.value(_MD_STARTTIME).toTime();
QTime end = sql.value(_MD_ENDTIME).toTime();
int nSt = sql.value(_MD_TIMETYPY_S).toInt();
int nEd = sql.value(_MD_TIMETYPY_E).toInt();
TimeStruct m_timeStruct;
m_timeStruct.m_Index = nIndex;
m_timeStruct.m_name = type;
m_timeStruct.m_startTime = start;
m_timeStruct.m_endTime = end;
m_timeStruct.time_start = (AMPMType)nSt;
m_timeStruct.time_end = (AMPMType)nEd;
m_MapTimeMatch.insert(type, m_timeStruct);
}
return true;
}
bool DetectDataDB::AddOneWarningMessage(WarnMessage m_messageInfo)
{
QVariantMap m_map;
m_map.insert(_MD_MESSAGE, m_messageInfo.m_Message);
m_map.insert(_MD_UPDATE_TIME, m_messageInfo.m_Date);
m_map.insert(_MD_CLASS, m_messageInfo.m_class);
return InsertOneData(_MD_WARNINGTABLE, m_map);
}
bool DetectDataDB::AddOneTime(TimeStruct &m_timestruct)
{
QVariantMap m_map;
m_map.insert(_MD_TYPE, m_timestruct.m_name);
m_map.insert(_MD_STARTTIME, m_timestruct.m_startTime);
m_map.insert(_MD_ENDTIME, m_timestruct.m_endTime);
m_map.insert(_MD_TIMETYPY_S, (int)m_timestruct.time_start);
m_map.insert(_MD_TIMETYPY_E, (int)m_timestruct.time_end);
return InsertOneData(_MD_TIMETABLE, m_map);
}
bool DetectDataDB::DelOneTime(TimeStruct &m_timestruct)
{
QString m_map = gensql::genClass(_MD_TYPE, m_timestruct.m_name);//!>生成where条件语句
QString strSql = gensql::genDeleteData(_MD_TIMETABLE, m_map);
db->exec(strSql);
if (db->lastError().isValid())
{
return false;
}
return true;
}
bool DetectDataDB::AddOneData(QVariantMap m_map)
{
/*该部分数据是保存检测结果+结果图片*/
QString strInsert = "INSERT INTO %1(%2) VALUES(%3)";
QString strHeader;//
QString strValue;//
QStringList strKeys = m_map.keys();
for (int i = 0; i < strKeys.size(); i++) {
strHeader += strKeys[i];
if (i + 1 < strKeys.size())
strHeader += ",";
strValue += ":" + strKeys[i] + "";
if (i + 1 < strKeys.size())
strValue += ",";
}
strInsert = strInsert.arg(_MD_TABLE_FORMS_MANE, strHeader, strValue);
//return strInsert;
QSqlQuery query = db->exec();
query.prepare(strInsert);
for (int i = 0; i < strKeys.size(); i++)
{
QString m_keys = strKeys.at(i);
QString str = ":" + m_keys;
query.bindValue(str, m_map.value(m_keys));
}
query.exec();
return true;
}

@ -0,0 +1,34 @@
#ifndef DETECTDATA_H
#define DETECTDATA_H
#include "databasesql.h"
#include <QObject>
#include "InfoFile.h"
#include "QMutex"
/*DetectDataDB 用于记录检测数据 便于查询和插入*/
class DetectDataDB : public DataBaseSql
{
Q_OBJECT
public:
DetectDataDB(const QString& dbName, const QString &dbType = QString("QSQLITE"));
~DetectDataDB();
virtual bool InitDatabase();
virtual bool checkoutData(QVariantMap m_value, QSqlQuery &sql);
virtual bool checkoutData(QString selectStr, QSqlQuery &sql);
virtual bool DelDatasByTime(QString minTime);
virtual bool DelAllDatas();
virtual bool DelWarnDataByCount(int model /*=1*/, int nCount/*=100000*/);
bool AddOneWarningMessage(WarnMessage m_messageInfo);
/*班次时间管理*/
bool ReadOutTimeData(QMap<QString, TimeStruct> &m_MapTimeMatch);
bool DelOneTime(TimeStruct &m_timestruct);
bool AddOneTime(TimeStruct &m_timestruct);
bool AddOneData(QVariantMap m_map);
private:
};
#endif // DETECTDATA_H

@ -0,0 +1,63 @@
#ifndef _INFOFILE_H_
#define _INFOFILE_H_
#include <QString>
#include <QTime>
#include "qstringlist.h"
#define WS_PICSIZE 129 //!>缩放大小
#define WS_PICSIZELIST 120
#define WF_HUBMODEL_ID "hubID"
#define WF_HUBMODEL_DIAMETER "diameter"//轮毂直径
#define WF_HUBMODEL_HEIGHT "height"//轮毂厚度
#define WF_HUBMODEL_CHANNELS "channels"
#define WF_HUBMODEL_FILEPATH "filepath"
#define WF_LIFHT "Light"
#define WF_PLCPARA "PlcPara"
#define WF_PARASET "paraSetting"//PLC参数设置
enum AMPMType{
AM=0,
PM=1,
};
struct TimeStruct
{
int m_Index;
QString m_name;
QTime m_startTime;
AMPMType time_start;
QTime m_endTime;
AMPMType time_end;
TimeStruct(){
time_start = AM;
time_end = AM;
}
};
struct WarnMessage
{
QString m_Message;
QString m_Date;
QString m_class;
};
struct ChannelInfo
{
QString m_ChannelName;
QString m_AboutName;
int m_value;
QStringList m_strModels;
};
enum EM_LOG_TYPE{
emTypeWaring = 1,
emTypeCameraState,
emTypeNetState,
emTypeRunState,
emTypeUseState
};
enum emTypeBee{
LIGHT_REDBEE = 0,
LIGHT_GREENBEE,
LIGHT_YELLOWBEE,
LIGHT_BEE
};
#endif

@ -0,0 +1,47 @@
#include "ModelDB.h"
#define _MD_PRIMARY_KEY "uid"
#define _MD_TABLE_FORMS_MANE "wftable" //数据表名称
#define _MD_MODEL "model" //model 模型名称
#define _MD_DIAMETER "diameter" //直径
#define _MD_HIGHT "hight" //高度
#define _MD_CORRELATE "correlate" //相似度
#define _MD_CHANNEL "channel" //通道
#define _MD_PICPATH "picpath" //图片路径
#define _MD_ROTATE "rotate"//辐条个数
#define _MD_UPDATE_TIME "time" //最后更新的时间
#define _MD_PIC "pic" //图片
ModelDB::ModelDB(const QString& dbName, const QString& dbType) :DataBaseSql(dbName, dbType)
{
}
ModelDB::~ModelDB()
{
}
bool ModelDB::InitDatabase()
{
if (!db->open())
{
return false;
}
return true;
}
QStringList ModelDB::ReadAllModes()
{
QStringList lst;
QString select_sql = QString("select * from ") + "modelTable";
QSqlQuery sql = db->exec(select_sql);
QSqlError err = sql.lastError();
int t = err.type();
if (t != QSqlError::NoError)
{
return lst;
}
while (sql.next())
{
QString strName = sql.value(_MD_MODEL).toString();
lst.append(strName);
}
return lst;
}

@ -0,0 +1,33 @@
/*!
*FileName: ModelDB.h
*Author: Pan Yingdong
*Email: bob.pan@hzleaper.com
*Created:2021/4/7 11:10
*Note:
*/
#ifndef _H_MODELDB_H_
#define _H_MODELDB_H_
#include "databasesql.h"
#include "InfoFile.h"
class ModelDB : public DataBaseSql
{
Q_OBJECT
public:
ModelDB(const QString& dbName, const QString &dbType = QString("QSQLITE"));
~ModelDB();
virtual bool InitDatabase();
QStringList ReadAllModes();//读出所有模板型号名数据
virtual bool checkoutData(QVariantMap m_value, QSqlQuery &sql) { return false; };
virtual bool checkoutData(QString selectStr, QSqlQuery &sql) { return false; };
virtual bool AddOneWarningMessage(struct WarnMessage m_messageInfo) { return false; };
virtual bool DelWarnDataByCount(int model = 1, int nCount = 100000) { return false; };
virtual bool DelAllDatas() { return false; };
virtual bool DelDatasByTime(QString minTime) { return false; };
};
#endif

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

@ -0,0 +1,70 @@
#ifndef CHECKDATA_H
#define CHECKDATA_H
#include <QObject>
#include "QStandardItemModel.h"
#include "QIcon"
#include "QPixmap"
#include "QByteArray"
#include "databasesql.h"
#include "QJsonObject"
#include <QVariantMap>
#pragma execution_character_set("utf-8")//使用utf-8编码 可以使用中文,解决乱码
class CheckData : public QObject
{
Q_OBJECT
public:
CheckData(QObject *parent=0){ m_pDb = NULL; };
~CheckData(){};
void setDB(DataBaseSql* pDB){ m_pDb = pDB; };
public slots:
void doWork(QVariantMap m_map)
{
QVariantMap m_proMap;
m_proMap.insert("Type", "start");
emit sgShowProgress(m_proMap);
QVariantMap Mapstr;
QString strSql_Count = m_map.value("SqlCount").toString();
QString strSql_Check = m_map.value("SqlCheck").toString();
int nLimit = m_map.value("limit").toInt();
int nSum = 0;
int nIndex = 0;
QSqlQuery sql_Check;
if (m_pDb){
QSqlQuery sql_Count;
m_proMap.insert("msg", "正在获取数量");
emit sgShowProgress(m_proMap);
m_pDb->checkoutData(strSql_Count, sql_Count);
while (sql_Count.next()){
nSum = sql_Count.value(0).toInt();
}
//加入
//emit something
m_proMap.remove("msg");
m_proMap.insert("msg", "正在获取数据");
emit sgShowProgress(m_proMap);
m_pDb->checkoutData(strSql_Check, sql_Check);
}
Mapstr.insert("sum", nSum);
Mapstr.insert("nIndex", nIndex);
Mapstr.insert("limit", nLimit);
m_proMap.remove("Type");
m_proMap.insert("Type", "stop");
emit sgShowProgress(m_proMap);
emit resultReady(Mapstr, sql_Check);
//emit something
};
private:
class DataBaseSql *m_pDb;
signals:
void resultReady(QVariantMap Mapstr,QSqlQuery sql);
void sgShowMsg(QString str);
void sgShowProgress(QVariantMap m_Map);
};
#endif // CHECKDATA_H

@ -0,0 +1,53 @@
#ifndef CHECKTHREAD_H
#define CHECKTHREAD_H
#include <QThread>
#include "QSqlQuery"
#include "databasesql.h"
#include "QMetaType"
#include "QStandardItemModel"
#include <QSqlRecord>
class CheckThread : public QThread
{
Q_OBJECT
public:
CheckThread(QObject *parent){ bFlags = false; };
~CheckThread(){};
void setModelFlags(bool m_flags = false){ bFlags = m_flags; }
void setCheckStr(DataBaseSql *pDb ,QString m_str){
m_pDb = pDb;
m_CheckStr = m_str;
};
void run() Q_DECL_OVERRIDE{
QSqlQuery sql;
int nCount = 0;
if (m_pDb){
m_pDb->checkoutData(m_CheckStr, sql);
if (bFlags == true)
{
while (sql.next())
{
QSqlRecord record = sql.record();
QString fieldName = record.fieldName(0);
QString num = sql.value(0).toString();
nCount = num.toInt();
// /*这里下面是统计查询到的通道对应的产品总数*/
}
}
}
emit (resultReady(sql));
emit(resultCount(nCount));
}
private:
DataBaseSql *m_pDb;
QString m_CheckStr;
bool bFlags;
signals:
void resultReady(QSqlQuery sql);
void resultCount(int nCount);
};
#endif // CHECKTHREAD_H

@ -0,0 +1,84 @@
#ifndef COUNTDATA_H
#define COUNTDATA_H
#include <QObject>
#include "databasesql.h"
#include "QSqlQuery"
#pragma execution_character_set("utf-8")
class CountData : public QObject
{
Q_OBJECT
public:
CountData(QObject *parent = 0){ m_pDb = NULL; };
~CountData(){};
void setDB(class DataBaseSql *pDb){ m_pDb = pDb; };
public slots:
void doWork(QVariantMap m_Map) {
QMap<QString, int> *m_counter=new QMap<QString, int>();
QVariantMap m_proMap;
m_proMap.insert("Type", "start");
emit sgShowProgress(m_proMap);
QString result;
QSqlQuery sqlCount;
QSqlQuery sql;
/* ... here is the expensive or blocking operation ... */
QString strSql_Count = m_Map.value("SqlCount").toString();
QString strSql_Check = m_Map.value("SqlCheck").toString();
if (m_pDb){
//m_counter->clear();
m_proMap.insert("msg", "正在获取数量...");
emit sgShowProgress(m_proMap);
m_pDb->checkoutData(strSql_Count, sqlCount);
//emit sgShowMsg("正在查询数据");
int sum = 0;
int m_size = 0;
while (sqlCount.next())
{
m_size = sqlCount.value(0).toInt();
}
QString strname = QString("select model,count(model) from (%1) GROUP BY model ;").arg(strSql_Check);
m_pDb->checkoutData(strname, sql);
//m_pDb->checkoutData(strSql_Check, sql);
//emit sgShowMsg("正在统计中");
m_proMap.remove("msg");
m_proMap.insert("msg", QString("共%1条记录正在分类核算数据请稍后").arg(m_size));
emit sgShowProgress(m_proMap);
while (sql.next())
{
/*这里下面是统计查询到的通道对应的产品总数*/
QString model = sql.value(0).toString();
int nValue = sql.value(1).toInt();
if (m_counter->contains(model))
{
(*m_counter)[model]++;
}
else
{
m_counter->insert(model, nValue);
}
}
result = QString("%1").arg(m_size);
emit sgShowMsg("统计完成");
}
m_proMap.remove("Type");
m_proMap.insert("Type", "stop");
emit sgShowProgress(m_proMap);
emit resultReady(result, m_counter);
}
signals:
void resultReady(const QString &result, const QMap<QString, int> *p);
void sgShowMsg(QString str);
void sgShowProgress(QVariantMap m_map);
private:
class DataBaseSql *m_pDb;
};
#endif // COUNTDATA_H

@ -0,0 +1,165 @@
#include "databasesql.h"
#include "gensql.h"
#define _MD_PRIMARY_KEY "uid"
#define _QMYSQL_ "QMYSQL"
#define _SQLITE_ "QSQLITE"
DataBaseSql::DataBaseSql(const QString& dbName, const QString &dbType)
{
m_DBType = dbType;
if (dbType == "QSQLITE")
{
db = new QSqlDatabase(QSqlDatabase::addDatabase("QSQLITE", dbName));
db->setDatabaseName(dbName);
//qry = QSqlQuery::QSqlQuery(db);
}
else if (dbType == "QMYSQL")
{
//if (!QSqlDatabase::contains(m_DBType))
db = new QSqlDatabase(QSqlDatabase::addDatabase("QMYSQL", dbName));
//db.setDatabaseName(dbName);
}
}
DataBaseSql::~DataBaseSql()
{
if (db->isOpen())
{
db->close();
}
delete db;
db = NULL;
}
bool DataBaseSql::openDB()
{
return db->open();
}
void DataBaseSql::closeDB()
{
db->close();
}
bool DataBaseSql::InitDatabase()
{
if (!db->open() && db->open())
{
return false;
}
return true;
}
bool DataBaseSql::CreatTable(QString m_tableName, QString m_primaty, QVariantMap m_map)
{
QString strSql;
if (m_DBType == _SQLITE_)
strSql = gensql::genCreateTabel(m_tableName, m_primaty, "INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL", m_map);
else if (m_DBType == _QMYSQL_)
strSql = QString("CREATE TABLE `testtable2` (`id` int(11) NOT NULL,`name` varchar(60) DEFAULT NULL,`age` int(11) DEFAULT NULL,PRIMARY KEY(`id`)) ENGINE = InnoDB DEFAULT CHARSET = utf8; ");
QSqlQuery sql = db->exec(strSql);
QSqlError err = sql.lastError();
int nType = err.type();
if (nType != QSqlError::NoError)
return false;
return true;
}
bool DataBaseSql::InsertOneData(QString m_tableName, QVariantMap m_map)
{
if (m_tableName.isEmpty() || m_map.empty()) {
return false;
}
QString strSql;
strSql = gensql::genInsertData(m_tableName, m_map);
qry = db->exec(strSql);
QSqlError bflags = qry.lastError();
int nType = bflags.type();
QString str = db->databaseName();
if (db->lastError().isValid())
{
return false;
}
return true;
}
bool DataBaseSql::ModefyOneData(QString m_tableName, QVariantMap m_map)
{
if (m_tableName.isEmpty() || m_map.empty()) {
return false;
}
int max_id = 0;
QString select_max_sql = "select max(md_unique) from e_report_forms";
QSqlQuery sql = db->exec(select_max_sql);
if (db->lastError().isValid())
{
return false;
}
else
{
while (sql.next())
{
max_id = sql.value(0).toInt();
}
}
QString m = gensql::genClass(_MD_PRIMARY_KEY, "0");
QString strSql = gensql::genUpdate(m_tableName, m_map, m);
db->exec(strSql);
if (db->lastError().isValid())
{
return false;
}
return true;
}
bool DataBaseSql::DeleteOneData(QString m_tableName, QString m_map)
{
if (m_tableName.isEmpty() || m_map.isEmpty()) {
return false;
}
int max_id = 0;
QString select_max_sql = "select max(" + QString(_MD_PRIMARY_KEY) + ") from " + m_tableName;
QSqlQuery sql = db->exec(select_max_sql);
if (db->lastError().isValid())
{
return false;
}
else
{
while (sql.next())
{
max_id = sql.value(0).toInt();
}
}
QString m;// = genClass(_MD_PRIMARY_KEY, "0");
QString strSql = gensql::genDeleteData(m_tableName, m);
db->exec(strSql);
if (db->lastError().isValid())
{
return false;
}
return true;
}
void DataBaseSql::SetDatabaseName(QString dbName)
{
db->setDatabaseName(dbName);
}
void DataBaseSql::SetDBPort(QString nAddr /*= QString("localhost")*/, int nPort /*= 3306*/)
{
db->setHostName(nAddr);
db->setPort(nPort);
}
void DataBaseSql::SetDBUser(QString dbUser /*= QString("root")*/, QString dbPwd /*= QString("hzleaper")*/)
{
db->setUserName(dbUser);
db->setPassword(dbPwd);
}

@ -0,0 +1,74 @@
#ifndef DATABASESQL_H
#define DATABASESQL_H
#include <QObject>
#include <QtSql\qsqldatabase.h>
#include <QtSql\qsqlquery.h>
#include <QtSql\qsqlerror.h>
#include <QtSql\qsqlrecord.h>
#include <QtSql\qsqlfield.h>
#include <QtSql\qsqldriver.h>
#include <QtCore\qstring.h>
#include <QtCore\qstringlist.h>
#include <QtCore\qvariant.h>
#include <QtCore\qbuffer.h>
#include <QVariantMap>
#include "QMutex"
#define _CHECK_TIME1_ "time1"
#define _CHECK_TIME2_ "time2"
#define _CHECK_NAME_ "name"
#define _CHECK_TYPE_ "Type"
#define _CHECK_COUNT_ "Count"
#define _CHECK_LOGTYPE "logType"
#define _CHECK_UID_ "uid"
enum EMTYPE_CHECKTYPE{
EMT_CHECK_BY_TIME = 0,//只按时间查询
EMT_CHECK_BY_NAME,//按照模型名查询
EMT_CHECK_BY_SAE,//按照起始结束时间查询
EMT_CHECK_BY_LOG,
EMT_CHECK_BY_COUNT,
EMT_CHECK_BY_UID,
};
class DataBaseSql : public QObject
{
Q_OBJECT
public:
DataBaseSql( const QString& dbName ,const QString &dbType = QString("QSQLITE"));
~DataBaseSql();
bool openDB();
void closeDB();
void SetDatabaseName(QString dbName);
void SetDBPort(QString nAddr = QString("localhost"), int nPort = 3306);
void SetDBUser(QString dbUser = QString("root"), QString dbPwd = QString("hzleaper"));
virtual bool InitDatabase();
bool CreatTable(QString m_tableName, QString m_primaty, QVariantMap m_map);
virtual bool InsertOneData(QString m_tableName, QVariantMap m_map);
virtual bool ModefyOneData(QString m_tableName, QVariantMap m_map);
virtual bool DeleteOneData(QString m_tableName, QString m_map);
/*
m_value.insert("time1","");//起始时间
m_value.insert("time2","");//结束时间
m_value.insert("name","");//模型名字
m_value.insert("Type","");//查询类型
m_value.insert("logType","");//报警信息查询
*/
virtual bool checkoutData(QVariantMap m_value, QSqlQuery &sql) = 0;
virtual bool checkoutData(QString selectStr, QSqlQuery &sql) = 0;
virtual bool AddOneWarningMessage(struct WarnMessage m_messageInfo) = 0;
virtual bool DelWarnDataByCount(int model = 1, int nCount = 100000) = 0;
virtual bool DelAllDatas() = 0;
virtual bool DelDatasByTime(QString minTime) = 0;
virtual QString genCheckStr(QVariantMap m_value);//通过value数据生成查询语句 实现与checkoutdata相同
public:
protected:
QSqlDatabase *db;
QSqlQuery qry;
QString m_DBType;
};
#endif // DATABASESQL_H

@ -0,0 +1,116 @@
#include "gensql.h"
#include <QVariantMap>
#include "QStringList"
QString gensql::genInsertData(const QString & strTableName, const QVariantMap &vMap)
{
QString strInsert = "INSERT INTO %1(%2) VALUES(%3)";
QString strHeader;//
QString strValue;//
QStringList strKeys = vMap.keys();
for (int i = 0; i < strKeys.size(); i++) {
strHeader += strKeys[i];
if (i + 1 < strKeys.size())
strHeader += ",";
strValue += "'" + vMap[strKeys[i]].toString() + "'";
if (i + 1 < strKeys.size())
strValue += ",";
}
strInsert = strInsert.arg(strTableName, strHeader, strValue);
return strInsert;
}
QString gensql::genSelect(const QString & strTableName, QStringList strSelectList, QString strClass)
{
QString strDstSelect;
if (strClass.isEmpty()) {
strDstSelect = "SELECT %1 FROM %2";
}
else {
strDstSelect = "SELECT %1 FROM %2 WHERE " + strClass;
}
if (0 == strSelectList.size()) {
strDstSelect = strDstSelect.arg("*").arg(strTableName);
}
else {
QString strSeletTmp = strSelectList[0];
for (int i = 1; i < strSelectList.size(); i++) {
strSeletTmp += "," + strSelectList[i];
}
strDstSelect = strDstSelect.arg(strSeletTmp, strTableName);
}
return strDstSelect;
}
QString gensql::genClass(QString strName, QString strValue)
{
QString strDst = "";
strDst += strName + " = '" + strValue + "'";
return strDst;
}
QString gensql::genUpdate(const QString & strTableName, QVariantMap &vMap, QString strClass)
{
QString strDst = "";//
if (strClass.isEmpty()) {
strDst = "UPDATE %1 SET %2";//全部修改
}
else {
strDst = "UPDATE %1 SET %2 WHERE %3";//指定修改
}
QString strUpdateTmp = "";
if (vMap.size() != 0) {
QStringList strList = vMap.keys();
strUpdateTmp += gensql::genClass(strList[0], vMap[strList[0]].toString());
for (int i = 1; i < strList.size(); i++) {
strUpdateTmp += "," + gensql::genClass(strList[i], vMap[strList[i]].toString());
}
}
strDst = strDst.arg(strTableName, strUpdateTmp, strClass);
return strDst;
}
QString gensql::genDeleteData(const QString & strTableName, QString strClass)
{
QString strDst;
if (strClass.isEmpty()) {
strDst = "DELETE FROM %1";//全部删除
}
else {
strDst = "DELETE FROM %1 WHERE %2";//指定删除
}
strDst = strDst.arg(strTableName, strClass);
return strDst;
}
QString gensql::genInsertColumn(const QString & strTableName, QString strName, QString strType)
{
QString strDst = "ALTER TABLE %1 ADD COLUMN %2 %3";
strDst = strDst.arg(strTableName).arg(strName).arg(strType);
return strDst;
}
QString gensql::genDeleteColumn(const QString & strTableName, QString strColumnName)
{
QString strDst = "ALTER TABLE %1 DROP %2";
strDst = strDst.arg(strTableName, strColumnName);
return strDst;
}
QString gensql::genCreateTabel(const QString strTable, QString strPrimary, QString strType, QVariantMap &vMap)
{
QString strDst = "CREATE TABLE IF NOT EXISTS %1 (%2)";
QString strColumn = strPrimary + " " + strType;
QStringList strList = vMap.keys();
for (int i = 0; i < strList.size(); i++) {
strColumn += ", " + strList[i] + " " + vMap[strList[i]].toString();
}
strDst = strDst.arg(strTable, strColumn);
return strDst;
}

@ -0,0 +1,15 @@
#ifndef _GENSQL_H_
#define _GENSQL_H_
#include "QMetaType"
#include "QString"
namespace gensql{
QString genInsertData(const QString & strTableName, const QVariantMap &vMap);
QString genSelect(const QString & strTableName, QStringList strSelectList, QString strClass);
QString genClass(QString strName, QString strValue);
QString genUpdate(const QString & strTableName, QVariantMap &vMap, QString strClass);
QString genDeleteData(const QString & strTableName, QString strClass);
QString genInsertColumn(const QString & strTableName, QString strName, QString strType);
QString genDeleteColumn(const QString & strTableName, QString strColumnName);
QString genCreateTabel(const QString strTable, QString strPrimary, QString strType, QVariantMap &vMap);
}
#endif

Binary file not shown.

File diff suppressed because it is too large Load Diff

@ -0,0 +1,130 @@
/*!
*FileName: lpReport.h
*Author: Pan Yingdong
*Email: bob.pan@hzleaper.com
*Created:2021/4/6 11:54
*Note:
*/
#ifndef _H_LPREPORT_H_
#define _H_LPREPORT_H_
#include <QtWidgets/QMainWindow>
#include "ui_lpReport.h"
#include <QDateTime>
#include "InfoFile.h"
#include <QStandardItemModel>
#include "QThread"
#include "workfordb.h"
#include "countdata.h"
#include "waitingdialog.h"
#include "checkdata.h"
#include <QMessageBox>
#include "DetectDataDB.h"
class lpReport : public QMainWindow
{
Q_OBJECT
public:
lpReport(QWidget *parent = Q_NULLPTR);
~lpReport();
void onInitUI();
protected:
virtual void timerEvent(QTimerEvent *event);
Q_SLOT void SlotEditTime();
Q_SLOT void onCheckButton();
bool onMessageBox(QMessageBox::Icon ntype, QString strTitle, QString strAtl, int onlyOK = 0);
void CheckDataHistoryByDate(QString m_strLast, QString m_endLast, QString modelname);
bool SaveDataToCSV(QString filePath, QMap<QString, int> &m_mapTable);
void CheckDataByDate(QString m_strLast, QString m_endLast);
void onEventLoop(QString strMsg);
void SaveLog(QString str);
QString getHistoryCheckString();
Q_SLOT void onHistoryButton();
void cleanHistorycal();
Q_SLOT void onSetCurrentIndex(int nIndex);
Q_SLOT void onSaveCSVDone(int);
Q_SLOT void handleResults(QString str);
Q_SLOT void onShowMessage(QString str);
Q_SLOT void onProgressForTsk(QVariantMap m_map);
Q_SLOT void handleResultsHistory(QVariantMap Mapstr, QSqlQuery sql);
Q_SLOT void onShowMsg();
Q_SLOT void handleResultsCount(const QString &result, const QMap<QString, int> *p);
Q_SLOT void onLogButton();
QString getLogCheckString(int nCheckCount = 0);
Q_SLOT void onUpdateTableViewShow(QSqlQuery sql);
void updateModelShowHistory(QSqlQuery &sql);
Q_SLOT void onUpdateTableViewShowlog(QSqlQuery sql);
Q_SLOT void onResultCountlog(int nCount);
Q_SLOT void onResultCount(int nCount);
void CheckDataWarningByDate(int nType, QString m_strLast, QString m_endLast);
void updateModelShowLog(QSqlQuery &sql);
Q_SLOT void SlotCombox(int index);
Q_SLOT void onSlowPixmap(QSqlQuery sql);
Q_SLOT void onTableViewClick(QModelIndex mIndex);
void InitUIParam();
void SetModelNames(QStringList models);
signals:
void sgSetCurrentIndex(int);
void sgFinish();
void operate(const QString& strTime, const int &ncount);
void operateCount(QVariantMap m_Map);
void operateHistory(QVariantMap m_map);
void sgshowMsg();
private:
Ui::lpReportClass ui;
class QReportWidget *reportdlg{ nullptr };
class QGridLayout *m_GridLayout{ nullptr };
class QVBoxLayout *Hbox{ nullptr };
class QWidget *m_countwidget{ nullptr };
protected:
QDateTime m_startDate_Count, m_endDate_Count;
QDateTime m_startDate_History, m_endDate_History;
QDateTime m_startDate_Warning, m_endDate_Warning;
QTime m_startTime, m_endTime;
bool m_CheckFlags{ false };
QTime nstartTime;
QTime nEndTime;
QString m_userName;
QMap<int, QTableView*> m_tableView;
QMap<int, QStandardItemModel*> m_standItemModel;
QMap<QString, TimeStruct> m_Totaltime;//班次时间表
QMap<QString, int> m_CountNumber;
QMap<int, QMap<QString, int>> m_channels;
int m_PrevNum{ 0 };
int m_NextNum{ 0 };
int m_totlaNum{ 0 };
int m_page{ 0 }, m_totalPage{ 0 };
int m_PrevNumlog{ 0 };
int m_NextNumlog{ 0 };
int m_totlaNumlog{ 0 };
int m_pagelog{ 0 }, m_totalPagelog{ 0 };
QThread m_Workthread;
WorkForDB *m_WorkDB{ nullptr };
QThread m_WorkThreadCount;
CountData *m_WorkCount{ nullptr };
QThread m_WorkThreadCheckHistory;
CheckData *m_WorkHistory{ nullptr };
WaitingDialog m_Progressdlg;
bool m_IsRunCountTsk{ false };
QCompleter *_pCompleter{ nullptr };
QStandardItemModel *m_tableModel{ nullptr };
QStandardItemModel *m_tableWarnModel{ nullptr };
class DetectDataDB *m_pDb{ nullptr };
class ModelDB *m_pModeDB{ nullptr };
};
#endif

@ -0,0 +1,6 @@
<RCC>
<qresource prefix="/lpReport">
<file>Resources/Log.png</file>
<file>Resources/log.ico</file>
</qresource>
</RCC>

Binary file not shown.

File diff suppressed because it is too large Load Diff

@ -0,0 +1,232 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{0E042214-1B06-40D6-9D20-C6D5FA3D7A51}</ProjectGuid>
<Keyword>Qt4VSv1.0</Keyword>
<WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v141</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v141</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<PropertyGroup Condition="'$(QtMsBuild)'=='' or !Exists('$(QtMsBuild)\qt.targets')">
<QtMsBuild>$(MSBuildProjectDirectory)\QtMsBuild</QtMsBuild>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
</PropertyGroup>
<Target Name="QtMsBuildNotFound" BeforeTargets="CustomBuild;ClCompile" Condition="!Exists('$(QtMsBuild)\qt.targets') or !Exists('$(QtMsBuild)\qt.props')">
<Message Importance="High" Text="QtMsBuild: could not locate qt.targets, qt.props; project may not build correctly." />
</Target>
<ImportGroup Condition="Exists('$(QtMsBuild)\qt.props')">
<Import Project="$(QtMsBuild)\qt.props" />
</ImportGroup>
<ImportGroup Label="ExtensionSettings" />
<ImportGroup Label="Shared" />
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<PreprocessorDefinitions>UNICODE;_UNICODE;WIN32;WIN64;QT_DLL;QT_CORE_LIB;QT_GUI_LIB;QT_WIDGETS_LIB;QT_SQL_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtSql;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<Optimization>Disabled</Optimization>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<OutputFile>$(SolutionDir)..\runner17\$(ProjectName).exe</OutputFile>
<AdditionalLibraryDirectories>$(QTDIR)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>qtmaind.lib;Qt5Cored.lib;Qt5Guid.lib;Qt5Widgetsd.lib;Qt5Sqld.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<QtMoc>
<OutputFile>.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</OutputFile>
<ExecutionDescription>Moc'ing %(Identity)...</ExecutionDescription>
<IncludePath>.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtSql;%(AdditionalIncludeDirectories)</IncludePath>
<Define>UNICODE;_UNICODE;WIN32;WIN64;QT_DLL;QT_CORE_LIB;QT_GUI_LIB;QT_WIDGETS_LIB;QT_SQL_LIB;%(PreprocessorDefinitions)</Define>
</QtMoc>
<QtUic>
<ExecutionDescription>Uic'ing %(Identity)...</ExecutionDescription>
<OutputFile>.\GeneratedFiles\ui_%(Filename).h</OutputFile>
</QtUic>
<QtRcc>
<ExecutionDescription>Rcc'ing %(Identity)...</ExecutionDescription>
<OutputFile>.\GeneratedFiles\qrc_%(Filename).cpp</OutputFile>
</QtRcc>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<PreprocessorDefinitions>UNICODE;_UNICODE;WIN32;WIN64;QT_DLL;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_GUI_LIB;QT_WIDGETS_LIB;QT_SQL_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtSql;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<DebugInformationFormat />
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<OutputFile>$(OutDir)\$(ProjectName).exe</OutputFile>
<AdditionalLibraryDirectories>$(QTDIR)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>false</GenerateDebugInformation>
<AdditionalDependencies>qtmain.lib;Qt5Core.lib;Qt5Gui.lib;Qt5Widgets.lib;Qt5Sql.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<QtMoc>
<OutputFile>.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</OutputFile>
<ExecutionDescription>Moc'ing %(Identity)...</ExecutionDescription>
<IncludePath>.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtSql;%(AdditionalIncludeDirectories)</IncludePath>
<Define>UNICODE;_UNICODE;WIN32;WIN64;QT_DLL;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_GUI_LIB;QT_WIDGETS_LIB;QT_SQL_LIB;%(PreprocessorDefinitions)</Define>
</QtMoc>
<QtUic>
<ExecutionDescription>Uic'ing %(Identity)...</ExecutionDescription>
<OutputFile>.\GeneratedFiles\ui_%(Filename).h</OutputFile>
</QtUic>
<QtRcc>
<ExecutionDescription>Rcc'ing %(Identity)...</ExecutionDescription>
<OutputFile>.\GeneratedFiles\qrc_%(Filename).cpp</OutputFile>
</QtRcc>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="databasesql.cpp" />
<ClCompile Include="DetectDataDB.cpp" />
<ClCompile Include="gensql.cpp" />
<ClCompile Include="lpReport.cpp" />
<ClCompile Include="main.cpp" />
<ClCompile Include="ModelDB.cpp" />
<ClCompile Include="qcheckcal.cpp" />
<ClCompile Include="qreportwidget.cpp" />
<ClCompile Include="qtimedlg.cpp" />
<ClCompile Include="testwidget.cpp" />
<ClCompile Include="waitingdialog.cpp" />
</ItemGroup>
<ItemGroup>
<QtMoc Include="lpReport.h" />
</ItemGroup>
<ItemGroup>
<QtUic Include="lpReport.ui" />
<QtUic Include="qtimedlg.ui" />
<QtUic Include="testwidget.ui" />
</ItemGroup>
<ItemGroup>
<QtRcc Include="lpReport.qrc" />
</ItemGroup>
<ItemGroup>
<QtMoc Include="checkdata.h">
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWidgets</IncludePath>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWidgets</IncludePath>
</QtMoc>
</ItemGroup>
<ItemGroup>
<QtMoc Include="checkthread.h">
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWidgets</IncludePath>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWidgets</IncludePath>
</QtMoc>
</ItemGroup>
<ItemGroup>
<QtMoc Include="countdata.h">
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWidgets</IncludePath>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWidgets</IncludePath>
</QtMoc>
</ItemGroup>
<ItemGroup>
<QtMoc Include="qcheckcal.h">
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWidgets</IncludePath>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWidgets</IncludePath>
</QtMoc>
</ItemGroup>
<ItemGroup>
<QtMoc Include="qreportwidget.h">
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWidgets</IncludePath>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWidgets</IncludePath>
</QtMoc>
</ItemGroup>
<ItemGroup>
<QtMoc Include="qsavecsvthread.h">
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWidgets</IncludePath>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWidgets</IncludePath>
</QtMoc>
</ItemGroup>
<ItemGroup>
<QtMoc Include="qtimedlg.h">
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWidgets</IncludePath>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWidgets</IncludePath>
</QtMoc>
</ItemGroup>
<ItemGroup>
<QtMoc Include="workfordb.h">
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWidgets</IncludePath>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWidgets</IncludePath>
</QtMoc>
<QtMoc Include="waitingdialog.h">
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWidgets</IncludePath>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWidgets</IncludePath>
</QtMoc>
<QtMoc Include="testwidget.h">
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWidgets</IncludePath>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWidgets</IncludePath>
</QtMoc>
</ItemGroup>
<ItemGroup>
<QtMoc Include="databasesql.h">
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtSql</IncludePath>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtSql</IncludePath>
</QtMoc>
</ItemGroup>
<ItemGroup>
<QtMoc Include="DetectDataDB.h">
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtSql</IncludePath>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtSql</IncludePath>
</QtMoc>
</ItemGroup>
<ItemGroup>
<ClInclude Include="gensql.h" />
<ClInclude Include="resource.h" />
<QtMoc Include="ModelDB.h">
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtSql</IncludePath>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtSql</IncludePath>
</QtMoc>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="lpReport.rc" />
</ItemGroup>
<ItemGroup>
<Image Include="Resources\log.ico" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Condition="Exists('$(QtMsBuild)\qt.targets')">
<Import Project="$(QtMsBuild)\qt.targets" />
</ImportGroup>
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
<ProjectExtensions>
<VisualStudio>
<UserProperties MocDir=".\GeneratedFiles\$(ConfigurationName)" UicDir=".\GeneratedFiles" RccDir=".\GeneratedFiles" lupdateOptions="" lupdateOnBuild="0" lreleaseOptions="" Qt5Version_x0020_x64="qt5.9.4-msvc2017-x64" MocOptions="" />
</VisualStudio>
</ProjectExtensions>
</Project>

@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{D9D6E242-F8AF-46E4-B9FD-80ECBC20BA3E}</UniqueIdentifier>
<Extensions>qrc;*</Extensions>
<ParseFiles>false</ParseFiles>
</Filter>
<Filter Include="Form Files">
<UniqueIdentifier>{99349809-55BA-4b9d-BF79-8FDBB0286EB3}</UniqueIdentifier>
<Extensions>ui</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{D9D6E242-F8AF-46E4-B9FD-80ECBC20BA3E}</UniqueIdentifier>
<Extensions>qrc;*</Extensions>
<ParseFiles>false</ParseFiles>
</Filter>
<Filter Include="Generated Files">
<UniqueIdentifier>{71ED8ED8-ACB9-4CE9-BBE1-E00B30144E11}</UniqueIdentifier>
<Extensions>moc;h;cpp</Extensions>
<SourceControlFiles>False</SourceControlFiles>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="main.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="lpReport.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="qcheckcal.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="qreportwidget.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="qtimedlg.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="testwidget.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="waitingdialog.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="databasesql.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="DetectDataDB.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="gensql.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="ModelDB.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<QtMoc Include="lpReport.h">
<Filter>Header Files</Filter>
</QtMoc>
<QtMoc Include="checkdata.h">
<Filter>Header Files</Filter>
</QtMoc>
<QtMoc Include="checkthread.h">
<Filter>Header Files</Filter>
</QtMoc>
<QtMoc Include="countdata.h">
<Filter>Header Files</Filter>
</QtMoc>
<QtMoc Include="qcheckcal.h">
<Filter>Header Files</Filter>
</QtMoc>
<QtMoc Include="qreportwidget.h">
<Filter>Header Files</Filter>
</QtMoc>
<QtMoc Include="qsavecsvthread.h">
<Filter>Header Files</Filter>
</QtMoc>
<QtMoc Include="qtimedlg.h">
<Filter>Header Files</Filter>
</QtMoc>
<QtMoc Include="testwidget.h">
<Filter>Header Files</Filter>
</QtMoc>
<QtMoc Include="waitingdialog.h">
<Filter>Header Files</Filter>
</QtMoc>
<QtMoc Include="workfordb.h">
<Filter>Header Files</Filter>
</QtMoc>
<QtMoc Include="databasesql.h">
<Filter>Header Files</Filter>
</QtMoc>
<QtMoc Include="DetectDataDB.h">
<Filter>Header Files</Filter>
</QtMoc>
<QtMoc Include="ModelDB.h">
<Filter>Header Files</Filter>
</QtMoc>
</ItemGroup>
<ItemGroup>
<QtUic Include="lpReport.ui">
<Filter>Form Files</Filter>
</QtUic>
<QtUic Include="qtimedlg.ui">
<Filter>Form Files</Filter>
</QtUic>
<QtUic Include="testwidget.ui">
<Filter>Form Files</Filter>
</QtUic>
</ItemGroup>
<ItemGroup>
<QtRcc Include="lpReport.qrc">
<Filter>Resource Files</Filter>
</QtRcc>
</ItemGroup>
<ItemGroup>
<ClInclude Include="gensql.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="resource.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="lpReport.rc" />
</ItemGroup>
<ItemGroup>
<Image Include="Resources\log.ico" />
</ItemGroup>
</Project>

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<QTDIR>D:\Qt\Qt5.9.4\5.9.4\msvc2017_64</QTDIR>
<LocalDebuggerCommand>$(SolutionDir)..\runner17\$(ProjectName).exe</LocalDebuggerCommand>
<LocalDebuggerWorkingDirectory>$(SolutionDir)..\runner17\</LocalDebuggerWorkingDirectory>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
<LocalDebuggerEnvironment>PATH=$(QTDIR)\bin%3b$(PATH)</LocalDebuggerEnvironment>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<QTDIR>D:\Qt\Qt5.9.4\5.9.4\msvc2017_64</QTDIR>
<LocalDebuggerEnvironment>PATH=$(QTDIR)\bin%3b$(PATH)</LocalDebuggerEnvironment>
</PropertyGroup>
</Project>

@ -0,0 +1,10 @@
#include "lpReport.h"
#include <QtWidgets/QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
lpReport w;
w.show();
return a.exec();
}

@ -0,0 +1,12 @@
#include "qcheckcal.h"
QCheckCal::QCheckCal(QWidget *parent)
: QWidget(parent)
{
}
QCheckCal::~QCheckCal()
{
}

@ -0,0 +1,18 @@
#ifndef QCHECKCAL_H
#define QCHECKCAL_H
#include <QWidget>
class QCheckCal : public QWidget
{
Q_OBJECT
public:
QCheckCal(QWidget *parent);
~QCheckCal();
private:
};
#endif // QCHECKCAL_H

@ -0,0 +1,186 @@
#include "qreportwidget.h"
#include <QHeaderView>
#include <QScrollBar>
#pragma execution_character_set("utf-8")
QReportWidget::QReportWidget(QString str /*=QString()*/, QWidget *parent/*=0*/) : QWidget(parent)
{
m_Title = str;
m_titleLabel = new QLabel;
m_TableView = new QTableView;
m_tableViewModel = new QStandardItemModel;
m_TableView->setAlternatingRowColors(true);
m_TableView->setSelectionBehavior(QAbstractItemView::SelectRows);
m_TableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
m_TableView->setWordWrap(true);
m_TableView->resizeColumnsToContents();
m_TableView->resizeRowsToContents();
//m_TableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);//自适应行宽
m_TableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
m_TableView->horizontalScrollBar()->setEnabled(false);
m_TableView->setMinimumHeight(100);
QVBoxLayout *VBox = new QVBoxLayout;
VBox->addWidget(m_titleLabel);
VBox->addWidget(m_TableView);
setLayout(VBox);
}
QReportWidget::~QReportWidget()
{
if (m_TableView){
delete m_TableView;
m_TableView = NULL;
}
if (m_tableViewModel){
m_tableViewModel->clear();
delete m_tableViewModel;
m_tableViewModel = NULL;
}
}
void QReportWidget::UpdateTableView()
{
m_titleLabel->setText(m_Title);
QStandardItemModel *m_tableViewModelTmp = new QStandardItemModel;
m_TableView->setModel(m_tableViewModelTmp);
QFont font;
font.setPixelSize(14);
m_titleLabel->setFont(font);
m_tableViewModel->clear();
m_tableViewModel->setHorizontalHeaderItem(0, new QStandardItem(tr("型号")));
m_tableViewModel->setHorizontalHeaderItem(1, new QStandardItem(tr("数量")));
int nIndex = 0;
for (QMap<QString, int>::iterator its = m_str.begin(); its != m_str.end(); ++its)
{
m_tableViewModel->setItem(nIndex, 0, new QStandardItem(its.key()));
m_tableViewModel->setItem(nIndex, 1, new QStandardItem(QString::number(*its)));
nIndex++;
}
if (m_listStr.size() > 0)
{
for (int m_Index = 0; m_Index < m_listStr.size(); m_Index++)
{
m_tableViewModel->setItem(nIndex, 0, new QStandardItem(m_listStr.at(m_Index).m_str));
m_tableViewModel->setItem(nIndex, 1, new QStandardItem(QString::number(m_listStr.at(m_Index).num)));
nIndex++;
}
}
m_TableView->setModel(m_tableViewModel);
delete m_tableViewModelTmp;
m_tableViewModelTmp = NULL;
}
void QReportWidget::drawTexts(QPainter* painter)
{
QDateTime cuttrnt_date_time = QDateTime::currentDateTime();
QString current_date = cuttrnt_date_time.toString("yyyy-MM-dd hh:mm:ss ddd");
QPoint point(10, 14);
QFont font;
font.setPixelSize(14);
painter->setFont(font);
//if (!m_Title.isEmpty())
{
// return;
}
QTextOption option(Qt::AlignLeft | Qt::AlignVCenter);
option.setWrapMode(QTextOption::WordWrap);
painter->drawText(rect(), m_Title, option);
if (m_str.size() > 0)
{
int y = point.y();
point.setY(y + 20);
painter->drawText(point, tr("编号"));
point.setX(10 + 2 * 28);
painter->drawText(point, tr("型号"));
point.setX(10 + 2 * 28 + 3 * 28);
painter->drawText(point, tr("数量"));
int i = 1;
point.setX(10);
font.setPixelSize(14);
painter->setFont(font);
for (QMap<QString, int>::iterator its = m_str.begin(); its != m_str.end(); ++its)
{
int y = point.y();
point.setX(10);
point.setY(y + 20);
painter->drawText(point, QString::number(i++));
point.setX(10 + 2 * 28);
painter->drawText(point, its.key());
point.setX(10 + 2 * 28 + 3 * 28);
painter->drawText(point, QString::number(*its));
}
if (m_listStr.size() > 0)
{
for (int nIndex = 0; nIndex < m_listStr.size(); nIndex++)
{
int y = point.y();
point.setX(10);
point.setY(y + 20);
painter->drawText(point, QString::number(i++));
point.setX(10 + 2 * 28);
painter->drawText(point, m_listStr.at(nIndex).m_str);
point.setX(10 + 2 * 28 + 3 * 28);
painter->drawText(point, QString::number(m_listStr.at(nIndex).num));
}
}
}
else
{
int y = point.y();
point.setY(y + 20);
painter->drawText(point, tr("请选择对应时间并查询数据!"));
}
//painter->drawLine(80, 100, 650, 500);
//painter->setPen(Qt::red);
//painter->drawRect(10, 10, 100, 400);
//painter->setPen(QPen(Qt::green, 5));
//painter->setBrush(Qt::blue);
//painter->drawEllipse(50, 150, 400, 200);
}
void QReportWidget::DrawOneItem(QPainter* painter, QPoint& point, QStringList &mList)
{
}
void QReportWidget::paintEvent(QPaintEvent *event)
{
//QPainter painter_text(this);
//drawTexts(&painter_text);
//painter_text.end();
}
void QReportWidget::AppendData(QString str, int num, bool model)
{
if (model == 0)
{
m_listStr.clear();
}
DataItem m_item;
m_item.m_str = str;
m_item.num = num;
m_listStr.append(m_item);
update();
}
void QReportWidget::setTitle(QString str)
{
m_Title = str;
}
void QReportWidget::ClearData()
{
m_Title.clear();
m_listStr.clear();
m_str.clear();
}
Q_SLOT void QReportWidget::SetData(QMap<QString, int> &m_strMap)
{
m_str = m_strMap;
}
void QReportWidget::resizeEvent(QResizeEvent *event)
{
QWidget::resizeEvent(event);
}

@ -0,0 +1,51 @@
#ifndef QREPORTWIDGET_H
#define QREPORTWIDGET_H
#include <QWidget>
#include <QPainter>
#include <QDateTime>
#include <QMap>
#include <QTableView>
#include <QLabel>
#include <QGridLayout>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QStandardItemModel>
#include <QStandardItem>
struct DataItem
{
QString m_str;
int num;
};
class QReportWidget : public QWidget
{
Q_OBJECT
public:
QReportWidget(QString str =QString(), QWidget *parent=0);
~QReportWidget();
protected:
virtual void paintEvent(QPaintEvent *event);
void resizeEvent(QResizeEvent *event);
private:
void drawTexts(QPainter* painter);
private:
QMap<QString, int> m_str;
QString m_Title;
public:
Q_SLOT void SetData(QMap<QString, int> &m_strMap);
void UpdateTableView();
void DrawOneItem(QPainter* painter, QPoint& point, QStringList &mList);
void AppendData(QString str, int num, bool model = 0);
void ClearData();
void setTitle(QString str);
QList<DataItem> m_listStr;
QLabel *m_titleLabel;
QTableView *m_TableView;
QStandardItemModel *m_tableViewModel;
};
#endif // QREPORTWIDGET_H

@ -0,0 +1,124 @@
#ifndef QSAVECSVTHREAD_H
#define QSAVECSVTHREAD_H
#include <QThread>
#include "QFile"
#include "QTextStream"
#include "QSqlQuery"
#include "QDateTime"
#include "databasesql.h"
#pragma execution_character_set("utf-8")
class QSaveCSVThread : public QThread
{
Q_OBJECT
public:
QSaveCSVThread(QObject *parent){};
~QSaveCSVThread(){};
void setInform(QString Title, QString username)
{
m_title = Title;
m_username = username;
}
void setCheckStr(DataBaseSql *pDb, QString m_str, QString savefilePath,int nType){
m_pDb = pDb;
m_CheckStr = m_str;
m_saveFilename = savefilePath;
m_Type = nType;
};
void run() Q_DECL_OVERRIDE{
if (m_Type == 0){
saveHistory();
}
else if (m_Type==1)
{
saveLog();
}
emit(resultReady(m_Type));
};
private:
void saveLog()
{
QSqlQuery sql;
if (m_pDb){
m_pDb->checkoutData(m_CheckStr, sql);
QFile file(m_saveFilename);
if (!file.open(QIODevice::WriteOnly | QIODevice::Text/* | QIODevice::Append*/))// 追加写入数据
return;
QTextStream out(&file);
QString tableData;
int nIndex = 0;
out << m_title << "\n";
out << QString("序号") << "," << QString("时间") << "," << QString("信息") << "\n";
while (sql.next())
{
nIndex = nIndex + 1;
out << nIndex << ",";
QString time = sql.value("time").toString();
QString message = sql.value("message").toString();
QString classd = sql.value("class").toString();
out << time << "," << message << ",";
out << "\n";
}
out << QString("总数") << "," << QString::number(nIndex) << "\n";
out << QString("保存时间:") << "," << QDateTime::currentDateTime().toString("yyyy-MM-dd") << "," << QDateTime::currentDateTime().toString("hh:mm:ss") << "\n";
out << QString("用户:") << "," << m_username << "," << "\n";
file.close();
}
};
void saveHistory()
{
QSqlQuery sql;
if (m_pDb){
m_pDb->checkoutData(m_CheckStr, sql);
QFile file(m_saveFilename);
if (!file.open(QIODevice::WriteOnly | QIODevice::Text/* | QIODevice::Append*/))// 追加写入数据
return ;
QTextStream out(&file);
QString tableData;
out << m_title << "\n";
out << QString("序号") << "," << QString("时间") << "," << QString("匹配型号") << "," << QString("相似度") << "," << QString("消耗时间") << "," << QString("直径") << "," << QString("厚度") << "\n";
int nIndex = 0;
while (sql.next())
{
QString time = sql.value("time").toString();
QString model = sql.value("model").toString();
double dCorrelate = sql.value("correlate").toDouble();
QString correlate;
if (dCorrelate >= 1.7976931348623158e+308)
dCorrelate = 0;
correlate = QString::number(dCorrelate * 100, 'f', 3) + "%";
double dDetecttime = sql.value("detecttime").toDouble();
QString detecttime = QString::number(dDetecttime, 'f', 3);
double dDiameter = sql.value("diameter").toDouble();
QString diameter = QString::number(dDiameter, 'f', 3);
double dHight = sql.value("hight").toDouble();
QString hight = QString::number(dHight, 'f', 3);
nIndex = nIndex + 1;
out << nIndex << ",";
out << time << "," << model << "," << correlate << "," << detecttime << "," << diameter << "," << hight << "\n";
}
out << QString("总数") << "," << QString::number(nIndex) << "\n";
out << QString("时间:") << "," << QDateTime::currentDateTime().toString("yyyy-MM-dd") << "," << QDateTime::currentDateTime().toString("hh:mm:ss") << "\n";
out << QString("用户:") << "," << m_username << "," << "\n";
file.close();
}
};
private:
int m_Type;
DataBaseSql *m_pDb;
QString m_CheckStr;
QString m_saveFilename;
QString m_title;
QString m_username;
signals:
void resultReady(int nType);
};
#endif // QSAVECSVTHREAD_H

@ -0,0 +1,131 @@
#include "qtimedlg.h"
#pragma execution_character_set("utf-8")
QTimeDlg::QTimeDlg(QWidget *parent)
: QDialog(parent), m_clock(NULL)
{
ui.setupUi(this);
m_clock = new QClockDlg;
m_clock->setMinimumSize(QSize(100, 150));
ui.gridLayout->addWidget(m_clock);
setWindowIcon(QIcon(":/image/leaper"));
setWindowFlags(Qt::WindowCloseButtonHint);//|Qt::WindowContextHelpButtonHint | Qt::WindowMinimizeButtonHint | Qt::WindowMaximizeButtonHint
//connect(ui.dial_timedlg, SIGNAL(valueChanged(int)), this, SLOT(valuechange(int)));
//connect(ui.dial_2_timedlg, SIGNAL(valueChanged(int)), this, SLOT(valuechange(int)));
connect(ui.hour_comboBox, SIGNAL(currentTextChanged(QString)), this, SLOT(onCurrentStrChange(QString)));
connect(ui.minute_comboBox, SIGNAL(currentTextChanged(QString)), this, SLOT(onCurrentStrChange(QString)));
connect(ui.pushButton_timedlg, SIGNAL(clicked()), this, SLOT(SlotOk()));
connect(ui.calendarWidget_timedlg, SIGNAL(clicked(const QDate &)), this, SLOT(SlotCalWidget(const QDate &)));
connect(ui.calendarWidget_timedlg, SIGNAL(currentPageChanged(int, int)), this, SLOT(oncurrentPageChanged(int, int)));
}
QTimeDlg::~QTimeDlg()
{
if (m_clock)
{
delete m_clock;
m_clock = NULL;
}
}
Q_SLOT void QTimeDlg::oncurrentPageChanged(int nyear, int nMonth)
{
m_Day = m_date.day();
m_date.setDate(nyear, nMonth, m_Day);
QString m_str = QString("%1 %2").arg(m_date.toString("yyyy-MM-dd")).arg(m_time.toString("hh:mm"));
ui.label_timedlg->setText(m_str);
}
Q_SLOT void QTimeDlg::onCurrentStrChange(QString str)
{
QString strObj = sender()->objectName();
if (strObj == "hour_comboBox"){
int m_minute = m_time.minute();
int m_value = str.toInt();
m_time.setHMS(m_value, m_minute, 0);
m_clock->SetTime(m_value, m_minute);
QString m_str = QString("%1 %2").arg(m_date.toString("yyyy-MM-dd")).arg(m_time.toString("hh:mm"));
ui.label_timedlg->setText(m_str);
}
else if (strObj == "minute_comboBox"){
int m_hour = m_time.hour();
int m_value = str.toInt();
m_clock->SetTime(m_hour, m_value);
m_time.setHMS(m_hour, m_value, 0);
QString m_str = QString("%1 %2").arg(m_date.toString("yyyy-MM-dd")).arg(m_time.toString("hh:mm"));
ui.label_timedlg->setText(m_str);
}
int a = 0;
}
Q_SLOT void QTimeDlg::valuechange(int m_value)
{
QObject *watch = sender();
QString m_objname = watch->objectName();
if (m_objname == "dial_timedlg")
{
int m_minute = m_time.minute();
m_time.setHMS(m_value, m_minute, 0);
m_clock->SetTime(m_value, m_minute);
QString m_str = QString("%1 %2").arg(m_date.toString("yyyy-MM-dd")).arg(m_time.toString("hh:mm"));
ui.label_timedlg->setText(m_str);
}
else if (m_objname == "dial_2_timedlg")
{
int m_hour = m_time.hour();
m_clock->SetTime(m_hour, m_value);
m_time.setHMS(m_hour, m_value, 0);
QString m_str = QString("%1 %2").arg(m_date.toString("yyyy-MM-dd")).arg(m_time.toString("hh:mm"));
ui.label_timedlg->setText(m_str);
}
}
Q_SLOT void QTimeDlg::SlotOk()
{
emit(QDialog::accept());
}
void QTimeDlg::SetDateTime(QDateTime m_datetime)
{
this->m_time = m_datetime.time();
this->m_date = m_datetime.date();
m_clock->InitTime(m_time.hour(), m_time.minute());
ui.hour_comboBox->setCurrentText(QString::number(m_time.hour()));
ui.minute_comboBox->setCurrentText(QString::number(m_time.minute()));
//ui.dial_timedlg->setValue(m_time.hour());
//ui.dial_2_timedlg->setValue(m_time.minute());
ui.calendarWidget_timedlg->setSelectedDate(m_date);
QString m_str = QString("%1 %2").arg(m_date.toString("yyyy-MM-dd")).arg(m_time.toString("hh:mm"));
ui.label_timedlg->setText(m_str);
}
void QTimeDlg::SetDateTime(QDate m_date, QTime m_time)
{
this->m_time = m_time;
this->m_date = m_date;
m_clock->InitTime(m_time.hour(), m_time.minute());
ui.hour_comboBox->setCurrentText(QString::number(m_time.hour()));
ui.minute_comboBox->setCurrentText(QString::number(m_time.minute()));
//ui.dial_timedlg->setValue(m_time.hour());
//ui.dial_2_timedlg->setValue(m_time.minute());
ui.calendarWidget_timedlg->setSelectedDate(m_date);
QString m_str = QString("%1 %2").arg(m_date.toString("yyyy-MM-dd")).arg(m_time.toString("hh:mm"));
ui.label_timedlg->setText(m_str);
}
void QTimeDlg::GetDateTime(QDateTime &m_datetime)
{
m_datetime.setDate(m_date);
m_datetime.setTime(m_time);
}
void QTimeDlg::GetDateTime(QDate &m_date, QTime &m_time)
{
m_time = this->m_time;
m_date = this->m_date;
}
Q_SLOT void QTimeDlg::SlotCalWidget(const QDate &mdate)
{
m_date = ui.calendarWidget_timedlg->selectedDate();
QString m_str = QString("%1 %2").arg(m_date.toString("yyyy-MM-dd")).arg(m_time.toString("hh:mm"));
ui.label_timedlg->setText(m_str);
}

@ -0,0 +1,477 @@
#ifndef QTIMEDLG_H
#define QTIMEDLG_H
#include <QDialog>
#include "ui_qtimedlg.h"
#include <QDate>
#include <QTime>
#include <QBasicTimer>
#include <QTime>
#include <QKeyEvent>
#include <QAction>
#include <QTimeLine>
#include <QPainter>
class Digits : public QWidget
{
Q_OBJECT
public:
/*Define three transition modes of the digital clock*/
enum {
Slide,
Flip,
Rotate
};
Digits(QWidget *parent)
: QWidget(parent)
, m_number(0)
, m_transition(Slide)
{
setAttribute(Qt::WA_OpaquePaintEvent, true);
//Widget paints all its pixels when it receives a paint event
setAttribute(Qt::WA_NoSystemBackground, true);
//Indicates that the widget has no background, i.e. when the widget receives paint events, the background is not automatically repainted.
connect(&m_animator, SIGNAL(frameChanged(int)), SLOT(update()));
//start animation
m_animator.setFrameRange(0, 100);
m_animator.setDuration(600);
//Construct a 0.6-second timeline with a frame range of 0 - 100
m_animator.setCurveShape(QTimeLine::EaseInOutCurve);
//starts growing slowly, then runs steadily, then grows slowly again
}
/*Set transition when time changed*/
void setTransition(int tr) {
m_transition = tr;
}
/*Get transition mode*/
int transition() const {
return m_transition;
}
/*Set hours and minutes*/
void setNumber(int n) {
if (m_number != n) {
m_number = qBound(0, n, 99);
preparePixmap();
update();
}
}
/*Flip to next state*/
void flipTo(int n) {
if (m_number != n) {
m_number = qBound(0, n, 99);
m_lastPixmap = m_pixmap;
preparePixmap();
m_animator.stop();
m_animator.start();
}
}
protected:
/*Draw the main frame of the digits area*/
void drawFrame(QPainter *p, const QRect &rect) {
p->setPen(Qt::NoPen);
QLinearGradient gradient(rect.topLeft(), rect.bottomLeft());
//Set linear gradient area
gradient.setColorAt(0.00, QColor(245, 245, 245));
gradient.setColorAt(0.49, QColor(192, 192, 192));
gradient.setColorAt(0.51, QColor(245, 245, 245));
gradient.setColorAt(1.00, QColor(192, 192, 192));
//Creates stop points at the given position with the given color
p->setBrush(gradient);
QRect r = rect;
p->drawRoundedRect(r, 15, 15, Qt::RelativeSize);
/*
Draws outer rectangle rect with rounded corners.
Qt::RelativeSize specifies the size relative to the bounding rectangle,
typically using percentage measurements.
*/
r.adjust(1, 4, -1, -4);
//Adds 1, 4, -1 and -4 respectively to the existing coordinates of the rectangle
p->setPen(QColor(181, 181, 181));
p->setBrush(Qt::NoBrush);
p->drawRoundedRect(r, 15, 15, Qt::RelativeSize);
//Draws inner rectangle rect with rounded corners.
p->setPen(QColor(159, 159, 159));
int y = rect.top() + rect.height() / 2 - 1;
p->drawLine(rect.left(), y, rect.right(), y);
//Draws the mid-line from (rect.left(), y) to (rect.right(), y) and sets the current pen position to (rect.right(), y)
}
/*Draw the digits*/
QPixmap drawDigits(int n, const QRect &rect) {
int scaleFactor = 2;
#if defined(Q_OS_SYMBIAN) || defined(Q_OS_WINCE_WM)
if (rect.height() > 240)
scaleFactor = 1;
#endif
QString str = QString::number(n);
if (str.length() == 1)
str.prepend("0");
//Ensure it is double-digit
QFont font;
font.setFamily("Helvetica");
int fontHeight = scaleFactor * 0.55 * rect.height();
font.setPixelSize(fontHeight);
//Sets the font size to pixelSize pixels
font.setBold(true);
QPixmap pixmap(rect.size() * scaleFactor);
pixmap.fill(Qt::transparent);
QLinearGradient gradient(QPoint(0, 0), QPoint(0, pixmap.height()));
//Constructs a linear gradient with interpolation area between (0,0) and (0,pixmap.height())
gradient.setColorAt(0.00, QColor(128, 128, 128));
gradient.setColorAt(0.49, QColor(64, 64, 64));
gradient.setColorAt(0.51, QColor(128, 128, 128));
gradient.setColorAt(1.00, QColor(16, 16, 16));
//Creates stop points at the given position with the given color
QPainter p;
p.begin(&pixmap);
p.setFont(font);
QPen pen;
pen.setBrush(QBrush(gradient));
//Set penbrush with linergrident
p.setPen(pen);
p.drawText(pixmap.rect(), Qt::AlignCenter, str);
//Draws the digit number(str here) within the provided rectangle
p.end();
return pixmap.scaledToWidth(width(), Qt::SmoothTransformation);
//Returns a scaled copy of the image which is transformed using bilinear filtering
}
/*prepare the pixmap */
void preparePixmap() {
m_pixmap = QPixmap(size());
m_pixmap.fill(Qt::transparent);
//Fills the pixmap with the given transparent black value (i.e., QColor(0, 0, 0, 0))
QPainter p;
p.begin(&m_pixmap);
p.drawPixmap(0, 0, drawDigits(m_number, rect()));
//Draws the given digits-pixmap at position (0, 0)
p.end();
}
/*define a resize event*/
void resizeEvent(QResizeEvent*) {
preparePixmap();
update();//Causes a paintEvent() call
}
/*Paint the static state*/
void paintStatic() {
QPainter p(this);
p.fillRect(rect(), Qt::black);
//Fill the widget rec with black color
int pad = width() / 10;
drawFrame(&p, rect().adjusted(pad, pad, -pad, -pad));
p.drawPixmap(0, 0, m_pixmap);
}
/*Paint the slide state*/
void paintSlide() {
QPainter p(this);
p.fillRect(rect(), Qt::black);
int pad = width() / 10;
QRect fr = rect().adjusted(pad, pad, -pad, -pad);
drawFrame(&p, fr);
p.setClipRect(fr);
//sets the clip region to the given rectangle using the given clip operation
int y = height() * m_animator.currentFrame() / 100;
p.drawPixmap(0, y, m_lastPixmap);
//Draw last-time state pixmap from 0 to height()(Y Coordinate) in 0.6 second
p.drawPixmap(0, y - height(), m_pixmap);
//Draw current-time state pixmap from -height() to 0 (Y Coordinate) in 0.6 second
}
/*Paint the flip state*/
void paintFlip() {
QPainter p(this);
#if !defined(Q_OS_SYMBIAN) && !defined(Q_OS_WINCE_WM)
p.setRenderHint(QPainter::SmoothPixmapTransform, true);
p.setRenderHint(QPainter::Antialiasing, true);
#endif
p.fillRect(rect(), Qt::black);
int hw = width() / 2;
int hh = height() / 2;
// behind is the new pixmap
int pad = width() / 10;
QRect fr = rect().adjusted(pad, pad, -pad, -pad);
drawFrame(&p, fr);
p.drawPixmap(0, 0, m_pixmap);
int index = m_animator.currentFrame();
if (index <= 50) {
// the top part of the old pixmap is flipping
int angle = -180 * index / 100;
QTransform transform;
transform.translate(hw, hh);
//Moves the coordinate system to the center of widget
transform.rotate(angle, Qt::XAxis);
//Rotates the coordinate system counterclockwise by angle about the X axis
p.setTransform(transform);
drawFrame(&p, fr.adjusted(-hw, -hh, -hw, -hh));
p.drawPixmap(-hw, -hh, m_lastPixmap);
// the bottom part is still the old pixmap
p.resetTransform();
p.setClipRect(0, hh, width(), hh);
//Enables clipping, and sets the clip region to the rectangle beginning at (0, hh) with the given width and height
drawFrame(&p, fr);
p.drawPixmap(0, 0, m_lastPixmap);
}
else {
p.setClipRect(0, hh, width(), hh);
// the bottom part is still the old pixmap
drawFrame(&p, fr);
p.drawPixmap(0, 0, m_lastPixmap);
// the bottom part of the new pixmap is flipping
int angle = 180 - 180 * m_animator.currentFrame() / 100;
QTransform transform;
transform.translate(hw, hh);
transform.rotate(angle, Qt::XAxis);
p.setTransform(transform);
drawFrame(&p, fr.adjusted(-hw, -hh, -hw, -hh));
p.drawPixmap(-hw, -hh, m_pixmap);
}
}
/*Paint the rotate state*/
void paintRotate() {
QPainter p(this);
int pad = width() / 10;
QRect fr = rect().adjusted(pad, pad, -pad, -pad);
drawFrame(&p, fr);
p.setClipRect(fr);
int angle1 = -180 * m_animator.currentFrame() / 100;
int angle2 = 180 - 180 * m_animator.currentFrame() / 100;
int angle = (m_animator.currentFrame() <= 50) ? angle1 : angle2;
QPixmap pix = (m_animator.currentFrame() <= 50) ? m_lastPixmap : m_pixmap;
QTransform transform;
transform.translate(width() / 2, height() / 2);
transform.rotate(angle, Qt::XAxis);
p.setTransform(transform);
p.setRenderHint(QPainter::SmoothPixmapTransform, true);
p.drawPixmap(-width() / 2, -height() / 2, pix);
}
void paintEvent(QPaintEvent *event) {
Q_UNUSED(event);
if (m_animator.state() == QTimeLine::Running) {
if (m_transition == Slide)
paintSlide();
if (m_transition == Flip)
paintFlip();
if (m_transition == Rotate)
paintRotate();
}
else {
paintStatic();
}
}
private:
int m_number;//number to set to digits
int m_transition;//transition mode(change effect)
QPixmap m_pixmap;//current time pixmap
QPixmap m_lastPixmap;//next state time pixmap
QTimeLine m_animator;
//used to animate a GUI control by calling a slot periodically
//The timeline's duration describes for how long the animation will run
//connect the frameChanged() signal to a suitable slot in the widget you wish to animate
};
class QClockDlg : public QWidget
{
Q_OBJECT
public:
QClockDlg(QWidget *parent = 0) : QWidget(parent)
{
m_Ihour = 0;
m_Iminute = 0;
m_hour = new Digits(this);
m_hour->show();
m_minute = new Digits(this);
m_minute->show();
QPalette pal = palette();
pal.setColor(QPalette::Window, Qt::gray);
//Sets the color used for the given color role, in all color groups, to the specified solid color.
setPalette(pal);
QAction *slideAction = new QAction("&Slide", this);
QAction *flipAction = new QAction("&Flip", this);
QAction *rotateAction = new QAction("&Rotate", this);
connect(slideAction, SIGNAL(triggered()), SLOT(chooseSlide()));
connect(flipAction, SIGNAL(triggered()), SLOT(chooseFlip()));
connect(rotateAction, SIGNAL(triggered()), SLOT(chooseRotate()));
#if defined(Q_OS_SYMBIAN) || defined(Q_OS_WINCE_WM)
menuBar()->addAction(slideAction);
menuBar()->addAction(flipAction);
menuBar()->addAction(rotateAction);
#else
addAction(slideAction);
addAction(flipAction);
addAction(rotateAction);
setContextMenuPolicy(Qt::ActionsContextMenu);
//Shows a context menu(right click)
#endif
}
void InitTime(int hour, int min){
m_hour->setNumber(hour);
m_minute->setNumber(min);
}
void SetTime(int hour, int min){
m_hour->flipTo(hour);
m_minute->flipTo(min);
m_Ihour = hour;
m_Iminute = min;
}
private:
QBasicTimer m_ticker;
Digits *m_hour;
Digits *m_minute;
protected:
void resizeEvent(QResizeEvent*) {
int digitsWidth = width() / 2;
int digitsHeight = digitsWidth * 1.2;
int y = (height() - digitsHeight) / 3;
m_hour->resize(digitsWidth, digitsHeight);
m_hour->move(0, y);
m_minute->resize(digitsWidth, digitsHeight);
m_minute->move(width() / 2, y);
}
/*Timer event,receive timer events */
void timerEvent(QTimerEvent*) {
updateTime();
}
/* Get key press event */
void keyPressEvent(QKeyEvent *event) {
if (event->key() == Qt::Key_Right) {
switchTransition(1);
event->accept();
}
if (event->key() == Qt::Key_Left) {
switchTransition(-1);
event->accept();
}
}
private slots:
void chooseSlide() {
m_hour->setTransition(0);
m_minute->setTransition(0);
updateTime();
}
void chooseFlip() {
m_hour->setTransition(1);
m_minute->setTransition(1);
updateTime();
}
void chooseRotate() {
m_hour->setTransition(2);
m_minute->setTransition(2);
updateTime();
}
public:
int m_Ihour, m_Iminute;
/*Real-time updates*/
void updateTime() {
m_hour->flipTo(m_Ihour);
m_minute->flipTo(m_Iminute);
}
/*Switch transition mode*/
void switchTransition(int delta) {
int i = (m_hour->transition() + delta + 3) % 3;
m_hour->setTransition(i);
m_minute->setTransition(i);
updateTime();
}
};
class QTimeDlg : public QDialog
{
Q_OBJECT
public:
QTimeDlg(QWidget *parent = 0);
~QTimeDlg();
Q_SLOT void SlotOk();
Q_SLOT void valuechange(int m_value);
Q_SLOT void SlotCalWidget(const QDate &m_date);
void SetDateTime(QDate m_date, QTime m_time);
void SetDateTime(QDateTime m_datetime);
void GetDateTime(QDate &m_date, QTime &m_time);
void GetDateTime(QDateTime &m_datetime);
Q_SLOT void onCurrentStrChange(QString str);
Q_SLOT void oncurrentPageChanged(int nyear, int nMonth);
private:
Ui::QTimeDlg ui;
QDate m_date;
QTime m_time;
QClockDlg *m_clock;
int m_year, m_month, m_Day;
};
#endif // QTIMEDLG_H

@ -0,0 +1,611 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>QTimeDlg</class>
<widget class="QDialog" name="QTimeDlg">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>584</width>
<height>380</height>
</rect>
</property>
<property name="windowTitle">
<string>时间设置</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<layout class="QGridLayout" name="gridLayout_4">
<item row="0" column="0">
<widget class="QCalendarWidget" name="calendarWidget_timedlg">
<property name="styleSheet">
<string notr="true">background-color: rgb(170, 170, 127);</string>
</property>
</widget>
</item>
<item row="0" column="1">
<layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0" colspan="4">
<layout class="QGridLayout" name="gridLayout"/>
</item>
<item row="1" column="2">
<widget class="QComboBox" name="minute_comboBox">
<property name="minimumSize">
<size>
<width>60</width>
<height>45</height>
</size>
</property>
<property name="font">
<font>
<family>Consolas</family>
<pointsize>12</pointsize>
<weight>50</weight>
<italic>false</italic>
<bold>false</bold>
</font>
</property>
<property name="layoutDirection">
<enum>Qt::LeftToRight</enum>
</property>
<property name="styleSheet">
<string notr="true">font: 12pt &quot;Consolas&quot;;</string>
</property>
<property name="iconSize">
<size>
<width>30</width>
<height>30</height>
</size>
</property>
<item>
<property name="text">
<string>0</string>
</property>
</item>
<item>
<property name="text">
<string>1</string>
</property>
</item>
<item>
<property name="text">
<string>2</string>
</property>
</item>
<item>
<property name="text">
<string>3</string>
</property>
</item>
<item>
<property name="text">
<string>4</string>
</property>
</item>
<item>
<property name="text">
<string>5</string>
</property>
</item>
<item>
<property name="text">
<string>6</string>
</property>
</item>
<item>
<property name="text">
<string>7</string>
</property>
</item>
<item>
<property name="text">
<string>8</string>
</property>
</item>
<item>
<property name="text">
<string>9</string>
</property>
</item>
<item>
<property name="text">
<string>10</string>
</property>
</item>
<item>
<property name="text">
<string>11</string>
</property>
</item>
<item>
<property name="text">
<string>12</string>
</property>
</item>
<item>
<property name="text">
<string>13</string>
</property>
</item>
<item>
<property name="text">
<string>14</string>
</property>
</item>
<item>
<property name="text">
<string>15</string>
</property>
</item>
<item>
<property name="text">
<string>16</string>
</property>
</item>
<item>
<property name="text">
<string>17</string>
</property>
</item>
<item>
<property name="text">
<string>18</string>
</property>
</item>
<item>
<property name="text">
<string>19</string>
</property>
</item>
<item>
<property name="text">
<string>20</string>
</property>
</item>
<item>
<property name="text">
<string>21</string>
</property>
</item>
<item>
<property name="text">
<string>22</string>
</property>
</item>
<item>
<property name="text">
<string>23</string>
</property>
</item>
<item>
<property name="text">
<string>24</string>
</property>
</item>
<item>
<property name="text">
<string>25</string>
</property>
</item>
<item>
<property name="text">
<string>26</string>
</property>
</item>
<item>
<property name="text">
<string>27</string>
</property>
</item>
<item>
<property name="text">
<string>28</string>
</property>
</item>
<item>
<property name="text">
<string>29</string>
</property>
</item>
<item>
<property name="text">
<string>30</string>
</property>
</item>
<item>
<property name="text">
<string>31</string>
</property>
</item>
<item>
<property name="text">
<string>32</string>
</property>
</item>
<item>
<property name="text">
<string>33</string>
</property>
</item>
<item>
<property name="text">
<string>34</string>
</property>
</item>
<item>
<property name="text">
<string>35</string>
</property>
</item>
<item>
<property name="text">
<string>36</string>
</property>
</item>
<item>
<property name="text">
<string>37</string>
</property>
</item>
<item>
<property name="text">
<string>38</string>
</property>
</item>
<item>
<property name="text">
<string>39</string>
</property>
</item>
<item>
<property name="text">
<string>40</string>
</property>
</item>
<item>
<property name="text">
<string>41</string>
</property>
</item>
<item>
<property name="text">
<string>42</string>
</property>
</item>
<item>
<property name="text">
<string>43</string>
</property>
</item>
<item>
<property name="text">
<string>44</string>
</property>
</item>
<item>
<property name="text">
<string>45</string>
</property>
</item>
<item>
<property name="text">
<string>46</string>
</property>
</item>
<item>
<property name="text">
<string>47</string>
</property>
</item>
<item>
<property name="text">
<string>48</string>
</property>
</item>
<item>
<property name="text">
<string>49</string>
</property>
</item>
<item>
<property name="text">
<string>50</string>
</property>
</item>
<item>
<property name="text">
<string>51</string>
</property>
</item>
<item>
<property name="text">
<string>52</string>
</property>
</item>
<item>
<property name="text">
<string>53</string>
</property>
</item>
<item>
<property name="text">
<string>54</string>
</property>
</item>
<item>
<property name="text">
<string>55</string>
</property>
</item>
<item>
<property name="text">
<string>56</string>
</property>
</item>
<item>
<property name="text">
<string>57</string>
</property>
</item>
<item>
<property name="text">
<string>58</string>
</property>
</item>
<item>
<property name="text">
<string>59</string>
</property>
</item>
</widget>
</item>
<item row="1" column="0">
<widget class="QComboBox" name="hour_comboBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>60</width>
<height>45</height>
</size>
</property>
<property name="font">
<font>
<family>Consolas</family>
<pointsize>12</pointsize>
<weight>50</weight>
<italic>false</italic>
<bold>false</bold>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::WheelFocus</enum>
</property>
<property name="styleSheet">
<string notr="true">font: 12pt &quot;Consolas&quot;;</string>
</property>
<property name="iconSize">
<size>
<width>30</width>
<height>30</height>
</size>
</property>
<item>
<property name="text">
<string>0</string>
</property>
</item>
<item>
<property name="text">
<string>1</string>
</property>
</item>
<item>
<property name="text">
<string>2</string>
</property>
</item>
<item>
<property name="text">
<string>3</string>
</property>
</item>
<item>
<property name="text">
<string>4</string>
</property>
</item>
<item>
<property name="text">
<string>5</string>
</property>
</item>
<item>
<property name="text">
<string>6</string>
</property>
</item>
<item>
<property name="text">
<string>7</string>
</property>
</item>
<item>
<property name="text">
<string>8</string>
</property>
</item>
<item>
<property name="text">
<string>9</string>
</property>
</item>
<item>
<property name="text">
<string>10</string>
</property>
</item>
<item>
<property name="text">
<string>11</string>
</property>
</item>
<item>
<property name="text">
<string>12</string>
</property>
</item>
<item>
<property name="text">
<string>13</string>
</property>
</item>
<item>
<property name="text">
<string>14</string>
</property>
</item>
<item>
<property name="text">
<string>15</string>
</property>
</item>
<item>
<property name="text">
<string>16</string>
</property>
</item>
<item>
<property name="text">
<string>17</string>
</property>
</item>
<item>
<property name="text">
<string>18</string>
</property>
</item>
<item>
<property name="text">
<string>19</string>
</property>
</item>
<item>
<property name="text">
<string>20</string>
</property>
</item>
<item>
<property name="text">
<string>21</string>
</property>
</item>
<item>
<property name="text">
<string>22</string>
</property>
</item>
<item>
<property name="text">
<string>23</string>
</property>
</item>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="label">
<property name="styleSheet">
<string notr="true">font: 12pt &quot;Consolas&quot;;</string>
</property>
<property name="text">
<string>小时</string>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QLabel" name="label_2">
<property name="styleSheet">
<string notr="true">font: 12pt &quot;Consolas&quot;;</string>
</property>
<property name="text">
<string>分钟</string>
</property>
</widget>
</item>
<item row="2" column="0">
<layout class="QGridLayout" name="gridLayout_2"/>
</item>
<item row="2" column="1">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_timedlg">
<property name="font">
<font>
<family>Consolas</family>
<pointsize>14</pointsize>
<weight>50</weight>
<italic>false</italic>
<bold>false</bold>
</font>
</property>
<property name="contextMenuPolicy">
<enum>Qt::DefaultContextMenu</enum>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string>2017/00/00 00:00</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QPushButton" name="pushButton_timedlg">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>100</width>
<height>60</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgb(76, 230, 0);
font: 75 12pt &quot;Consolas&quot;;</string>
</property>
<property name="text">
<string>确定</string>
</property>
</widget>
</item>
</layout>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>

@ -0,0 +1,16 @@
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ 生成的包含文件。
// 供 lpReport.rc 使用
//
#define IDI_ICON1 101
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 102
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1001
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

@ -0,0 +1,103 @@
#include "testwidget.h"
#include "QPushButton"
#include "QLineEdit"
#include "QAbstractItemView"
#pragma execution_character_set("utf-8")
TestWidget::TestWidget(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
m_treewidget = ui.treeWidget;
initTreewidget(m_treewidget);
}
void TestWidget::initTreewidget(QTreeWidget* pTreewidget)
{
QStringList header;
header.append("属性");
header.append("");
pTreewidget->setHeaderLabels(header);
pTreewidget->header()->setStretchLastSection(true);
pTreewidget->setColumnCount(2);
pTreewidget->setStyleSheet("QTreeView::item:hover{background-color:rgb(0,255,0,50)}"
"QTreeView::item:selected{background-color:rgb(255,0,0,100)}");
//pTreewidget->setSelectionModel(QAbstractItemView::ExtendedSelection);
pTreewidget->setColumnWidth(0, 100);
addIPRoot(pTreewidget);
addEDitRoot(pTreewidget);
}
void TestWidget::addIPRoot(QTreeWidget *pTreewidget)
{
QRegExp regExpIP("((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])[\\.]){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])");
QRegExp regExpNetPort("((6553[0-5])|[655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{3}|[1-9][0-9]{2}|[1-9][0-9]|[0-9])");
QRegExp regExpChannel("[0-5]");
QTreeWidgetItem *m_IPItems = new QTreeWidgetItem(pTreewidget, QStringList(QString("IP地址配置")));
QTreeWidgetItem *m_ServerItems = new QTreeWidgetItem(m_IPItems, QStringList(QString("本机服务器IP地址设置")));
QList<QTreeWidgetItem *> serveritems;
serveritems.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("操作"))));
serveritems.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("IP地址"))));
serveritems.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("开放端口"))));
m_ServerItems->addChildren(serveritems);
QPushButton* m_pButOpen = new QPushButton("打开服务");
QLineEdit *m_EditserverIP = new QLineEdit;
QLineEdit *m_EditserverPort = new QLineEdit;
m_EditserverIP->setValidator(new QRegExpValidator(regExpIP, this));
m_EditserverPort->setValidator(new QRegExpValidator(regExpNetPort, this));
m_EditserverIP->setText("192.168.1.1");
m_EditserverPort->setText("100");
pTreewidget->setItemWidget(serveritems.at(0), 1, m_pButOpen);
pTreewidget->setItemWidget(serveritems.at(1), 1, m_EditserverIP);
pTreewidget->setItemWidget(serveritems.at(2), 1, m_EditserverPort);
QTreeWidgetItem *m_ClientItems = new QTreeWidgetItem(m_IPItems, QStringList(QString("目标客户端IP地址设置")));
QList<QTreeWidgetItem*> clientitems;
clientitems.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("IP地址"))));
clientitems.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("源端口"))));
m_ClientItems->addChildren(clientitems);
QLineEdit *m_EditclientIP = new QLineEdit;
QLineEdit *m_EditclientPort = new QLineEdit;
m_EditclientIP->setValidator(new QRegExpValidator(regExpIP, this));
m_EditclientPort->setValidator(new QRegExpValidator(regExpNetPort, this));
pTreewidget->setItemWidget(clientitems.at(0), 1, m_EditclientIP);
pTreewidget->setItemWidget(clientitems.at(1), 1, m_EditclientPort);
QPushButton *pSaveButton = new QPushButton("保存");
QTreeWidgetItem* saveItem = new QTreeWidgetItem(m_IPItems, QStringList(QString("保存设置")));
pTreewidget->setItemWidget(saveItem, 1, pSaveButton);
}
void TestWidget::addEDitRoot(QTreeWidget *pTreewidget)
{
QTreeWidgetItem *m_IPItems = new QTreeWidgetItem(pTreewidget, QStringList(QString("Edit设置")));
QList<QTreeWidgetItem *> items;
QList<QLineEdit*> pLineEdits;
for (int i = 0; i < 10; i++)
{
items.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("item: %1").arg(i))));
QLineEdit *pEdit = new QLineEdit;
pEdit->setText(QString("%1").arg(i));
pLineEdits.append(pEdit);
}
m_IPItems->addChildren(items);
pTreewidget->insertTopLevelItem(0, m_IPItems);
for (int nIndex = 0; nIndex < pLineEdits.size(); nIndex++)
{
pTreewidget->setItemWidget(items.at(nIndex), 1, pLineEdits.at(nIndex));
}
}
TestWidget::~TestWidget()
{
m_treewidget->clear();
}

@ -0,0 +1,22 @@
#ifndef TESTWIDGET_H
#define TESTWIDGET_H
#include <QWidget>
#include "ui_testwidget.h"
#include <QTreeWidget>
class TestWidget : public QWidget
{
Q_OBJECT
public:
TestWidget(QWidget *parent = 0);
~TestWidget();
void initTreewidget(QTreeWidget* pTreewidget);
void addIPRoot(QTreeWidget *pTreewidget);
void addEDitRoot(QTreeWidget *pTreewidget);
private:
Ui::TestWidget ui;
QTreeWidget * m_treewidget;
};
#endif // TESTWIDGET_H

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>TestWidget</class>
<widget class="QWidget" name="TestWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>659</width>
<height>562</height>
</rect>
</property>
<property name="windowTitle">
<string>TestWidget</string>
</property>
<widget class="QTreeWidget" name="treeWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>491</width>
<height>541</height>
</rect>
</property>
<column>
<property name="text">
<string notr="true">1</string>
</property>
</column>
</widget>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>

@ -0,0 +1,50 @@
#include "waitingdialog.h"
#include "QBoxLayout"
#include <QProgressBar>
WaitingDialog::WaitingDialog(QWidget *parent)
: QDialog(parent)
{
m_ProgressBar = NULL;
m_ProgressBar = new QProgressBar(this);
m_CurrentValue = m_MaxValue = m_UpdateInterval = 0;
m_ProgressBar->setRange(0, 100);
connect(&m_Timer, SIGNAL(timeout()), this, SLOT(UpdateSlot()));
m_ProgressBar->setTextVisible(false);
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(m_ProgressBar);
setLayout(layout);
}
WaitingDialog::~WaitingDialog()
{
if (m_ProgressBar)
{
delete m_ProgressBar;
m_ProgressBar = NULL;
}
}
void WaitingDialog::Start(int interval /*= 100*/, int maxValue /*= 100*/)
{
m_UpdateInterval = interval;
m_MaxValue = maxValue;
m_CurrentValue = 0;
if (m_Timer.isActive())
m_Timer.stop();
m_Timer.start(m_UpdateInterval);
m_ProgressBar->setRange(0, m_MaxValue);
m_ProgressBar->setValue(0);
}
void WaitingDialog::Stop()
{
m_Timer.stop();
}
void WaitingDialog::UpdateSlot()
{
m_CurrentValue++;
if (m_CurrentValue == m_MaxValue)
m_CurrentValue = 0;
m_ProgressBar->setValue(m_CurrentValue);
}

@ -0,0 +1,28 @@
#ifndef WAITINGDIALOG_H
#define WAITINGDIALOG_H
#include <QDialog>
#include "QTimer"
#include <QProgressBar>
class WaitingDialog : public QDialog
{
Q_OBJECT
public:
WaitingDialog(QWidget *parent =0);
~WaitingDialog();
void Start(int interval = 100, int maxValue = 100);
void Stop();
private slots:
void UpdateSlot();
private:
int m_CurrentValue;
int m_UpdateInterval;
int m_MaxValue;
QTimer m_Timer;
QProgressBar *m_ProgressBar;
};
#endif // WAITINGDIALOG_H

@ -0,0 +1,32 @@
#ifndef WORKFORDB_H
#define WORKFORDB_H
#include <QObject>
#include "databasesql.h"
class WorkForDB : public QObject
{
Q_OBJECT
public:
WorkForDB(QObject *parent = 0){ m_pDb = NULL; };
~WorkForDB(){};
void setDB(DataBaseSql* pDB){ m_pDb = pDB; };
public slots:
void doWork(const QString& strTime, const int &ncount)
{
QString str;
if (m_pDb){
m_pDb->DelDatasByTime(strTime);
m_pDb->DelWarnDataByCount(1, ncount);
m_pDb->DelWarnDataByCount(4, ncount);
}
emit resultReady(str);
};
private:
class DataBaseSql *m_pDb;
signals:
void resultReady(QString str);
};
#endif // WORKFORDB_H

@ -9,30 +9,80 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tpAlgorithmQt", "tpAlgorith
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RasterSDG20", "RasterSDG20\RasterSDG20.vcxproj", "{CE765894-2106-48FE-99C3-D8D7624889A0}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lpCoreCtrl", "..\..\Valve\tpvs17\lpCoreCtrl\lpCoreCtrl.vcxproj", "{784071A9-BF94-4D27-B62E-588ACD7E0633}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "QUserInfo", "QUserInfo\QUserInfo.vcxproj", "{D7AF8AA1-0F2C-407F-B135-FBDA4448EE16}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tpCamHik", "..\..\Valve\tpvs17\tpCamHik\tpCamHik.vcxproj", "{64C9A32D-82E8-4C36-9AA6-52D58B23F687}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tpCamBaumer", "..\..\Valve\tpvs17\tpCamBaumer\tpCamBaumer.vcxproj", "{4CB8DBEB-EE73-4CEA-B662-E18B79EE113C}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lpReport", "lpReport\lpReport.vcxproj", "{0E042214-1B06-40D6-9D20-C6D5FA3D7A51}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{A229CF5C-81EF-4909-AB6E-49C746F1ED4C}.Debug|x64.ActiveCfg = Debug|x64
{A229CF5C-81EF-4909-AB6E-49C746F1ED4C}.Debug|x64.Build.0 = Debug|x64
{A229CF5C-81EF-4909-AB6E-49C746F1ED4C}.Debug|x86.ActiveCfg = Debug|x64
{A229CF5C-81EF-4909-AB6E-49C746F1ED4C}.Release|x64.ActiveCfg = Release|x64
{A229CF5C-81EF-4909-AB6E-49C746F1ED4C}.Release|x64.Build.0 = Release|x64
{A229CF5C-81EF-4909-AB6E-49C746F1ED4C}.Release|x86.ActiveCfg = Release|x64
{B12702AD-ABFB-343A-A199-8E24837244A3}.Debug|x64.ActiveCfg = Debug|x64
{B12702AD-ABFB-343A-A199-8E24837244A3}.Debug|x64.Build.0 = Debug|x64
{B12702AD-ABFB-343A-A199-8E24837244A3}.Debug|x86.ActiveCfg = Debug|x64
{B12702AD-ABFB-343A-A199-8E24837244A3}.Release|x64.ActiveCfg = Release|x64
{B12702AD-ABFB-343A-A199-8E24837244A3}.Release|x64.Build.0 = Release|x64
{B12702AD-ABFB-343A-A199-8E24837244A3}.Release|x86.ActiveCfg = Release|x64
{CE765894-2106-48FE-99C3-D8D7624889A0}.Debug|x64.ActiveCfg = Debug|x64
{CE765894-2106-48FE-99C3-D8D7624889A0}.Debug|x64.Build.0 = Debug|x64
{CE765894-2106-48FE-99C3-D8D7624889A0}.Debug|x86.ActiveCfg = Debug|x64
{CE765894-2106-48FE-99C3-D8D7624889A0}.Release|x64.ActiveCfg = Release|x64
{CE765894-2106-48FE-99C3-D8D7624889A0}.Release|x64.Build.0 = Release|x64
{CE765894-2106-48FE-99C3-D8D7624889A0}.Release|x86.ActiveCfg = Release|x64
{784071A9-BF94-4D27-B62E-588ACD7E0633}.Debug|x64.ActiveCfg = Debug|x64
{784071A9-BF94-4D27-B62E-588ACD7E0633}.Debug|x64.Build.0 = Debug|x64
{784071A9-BF94-4D27-B62E-588ACD7E0633}.Debug|x86.ActiveCfg = Debug|x64
{784071A9-BF94-4D27-B62E-588ACD7E0633}.Release|x64.ActiveCfg = Release|x64
{784071A9-BF94-4D27-B62E-588ACD7E0633}.Release|x64.Build.0 = Release|x64
{784071A9-BF94-4D27-B62E-588ACD7E0633}.Release|x86.ActiveCfg = Release|x64
{D7AF8AA1-0F2C-407F-B135-FBDA4448EE16}.Debug|x64.ActiveCfg = Debug|x64
{D7AF8AA1-0F2C-407F-B135-FBDA4448EE16}.Debug|x64.Build.0 = Debug|x64
{D7AF8AA1-0F2C-407F-B135-FBDA4448EE16}.Debug|x86.ActiveCfg = Debug|x64
{D7AF8AA1-0F2C-407F-B135-FBDA4448EE16}.Release|x64.ActiveCfg = Release|x64
{D7AF8AA1-0F2C-407F-B135-FBDA4448EE16}.Release|x64.Build.0 = Release|x64
{D7AF8AA1-0F2C-407F-B135-FBDA4448EE16}.Release|x86.ActiveCfg = Release|x64
{64C9A32D-82E8-4C36-9AA6-52D58B23F687}.Debug|x64.ActiveCfg = Debug|x64
{64C9A32D-82E8-4C36-9AA6-52D58B23F687}.Debug|x64.Build.0 = Debug|x64
{64C9A32D-82E8-4C36-9AA6-52D58B23F687}.Debug|x86.ActiveCfg = Debug|Win32
{64C9A32D-82E8-4C36-9AA6-52D58B23F687}.Debug|x86.Build.0 = Debug|Win32
{64C9A32D-82E8-4C36-9AA6-52D58B23F687}.Release|x64.ActiveCfg = Release|x64
{64C9A32D-82E8-4C36-9AA6-52D58B23F687}.Release|x64.Build.0 = Release|x64
{64C9A32D-82E8-4C36-9AA6-52D58B23F687}.Release|x86.ActiveCfg = Release|Win32
{64C9A32D-82E8-4C36-9AA6-52D58B23F687}.Release|x86.Build.0 = Release|Win32
{4CB8DBEB-EE73-4CEA-B662-E18B79EE113C}.Debug|x64.ActiveCfg = Debug|x64
{4CB8DBEB-EE73-4CEA-B662-E18B79EE113C}.Debug|x64.Build.0 = Debug|x64
{4CB8DBEB-EE73-4CEA-B662-E18B79EE113C}.Debug|x86.ActiveCfg = Debug|x64
{4CB8DBEB-EE73-4CEA-B662-E18B79EE113C}.Release|x64.ActiveCfg = Release|x64
{4CB8DBEB-EE73-4CEA-B662-E18B79EE113C}.Release|x64.Build.0 = Release|x64
{4CB8DBEB-EE73-4CEA-B662-E18B79EE113C}.Release|x86.ActiveCfg = Release|x64
{0E042214-1B06-40D6-9D20-C6D5FA3D7A51}.Debug|x64.ActiveCfg = Debug|x64
{0E042214-1B06-40D6-9D20-C6D5FA3D7A51}.Debug|x64.Build.0 = Debug|x64
{0E042214-1B06-40D6-9D20-C6D5FA3D7A51}.Debug|x86.ActiveCfg = Debug|x64
{0E042214-1B06-40D6-9D20-C6D5FA3D7A51}.Release|x64.ActiveCfg = Release|x64
{0E042214-1B06-40D6-9D20-C6D5FA3D7A51}.Release|x64.Build.0 = Release|x64
{0E042214-1B06-40D6-9D20-C6D5FA3D7A51}.Release|x86.ActiveCfg = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {CD365F32-5EAC-4A16-AD47-BFB1D8E5511A}
Qt5Version = qt5.9.4-msvc2017-x64
SolutionGuid = {CD365F32-5EAC-4A16-AD47-BFB1D8E5511A}
EndGlobalSection
EndGlobal

Loading…
Cancel
Save