QT 用正則表示式從tableView中篩選出某一日期範圍內的資料
阿新 • • 發佈:2018-11-05
QDate date1,date2;
date1=ui->dateEdit_2->date();//提取開始時間
date2=ui->dateEdit_3->date();//提取結束時間
data_filter->setSourceModel(data_model);//data_model取出資料
ui-> tableView->setModel(data_filter);//關聯
data_filter->setFilterKeyColumn(1);//選擇時間列第一列
QString shijianduan=DateToReg(date1,date2);//轉換成正則表示式
data_filter->setFilterRegExp(QRegExp(shijianduan));//選出資料////完成///
QString MainWindow::DateToReg(QDate startDate,QDate endDate)//zhuan正則表示式
{ bool ok;
int startyear = startDate.toString("yyyy").toInt(&ok,10);
int startmonth=startDate.toString("MM").toInt(&ok,10);
QString startmonthStr=startDate.toString("MM");
// if(startmonth<10)startmonthStr="0"+startmonthStr;
int startday=startDate.toString("dd").toInt(&ok,10);
int endyear =endDate.toString("yyyy").toInt(&ok,10);
int endmonth=endDate.toString("MM").toInt(&ok,10);
QString endmonthStr=endDate.toString("MM");
// if(endmonth<10)endmonthStr="0"+endmonth;
int endday=endDate.toString("dd").toInt(&ok,10);
QString sb;
if(endyear-startyear>0)
{//跨年情況,獲得月份正則表示式
if(startmonth<9){
sb.append("(");
sb.append(QString::number(startyear));
sb.append("-0[");
sb.append(QString::number(startmonth+1));
sb.append("-9])|");
sb.append("(");
sb.append(QString::number(startyear));
sb.append("-1[0-2])|");
}
else if(startmonth!=12){
sb.append("(");
sb.append(QString::number(startyear));
sb.append("-1[");
sb.append(QString::number(startmonth%10+1));
sb.append("-2])|");
}
if(1< endmonth&&endmonth<11){
sb.append("(");
sb.append(QString::number(endyear));
sb.append("-0[1-");
sb.append(QString::number(endmonth-1));
sb.append("])|");
}else if(endmonth!=1){
sb.append("(");
sb.append(QString::number(endyear));
sb.append("-[0-9]");
sb.append(",");
sb.append(QString::number(endyear));
sb.append("-1[0-");
sb.append(QString::number(endmonth%10-1));
sb.append("])|");
}
sb.append(differentMonthDayReg(startyear,startmonthStr,startday,endyear,endmonthStr,endday));
}
else{//不跨年情況,獲得月份正則表示式
if(endmonth-startmonth>1)
{//相隔了兩個月以上
if(endmonth<11){
sb.append("(");
sb.append(QString::number(startyear));
sb.append("-");
sb.append("0[");
sb.append(QString::number(startmonth));
sb.append("-");
sb.append(QString::number(endmonth-1));
sb.append("])|");
}
else if(startmonth>8){
sb.append("(");
sb.append(QString::number(startyear));
sb.append("-");
sb.append("1[");
sb.append(QString::number((startmonth+1)%10));
sb.append("-");
sb.append(QString::number(endmonth%10-1));
sb.append("])|");
}
else {
sb.append("(");
sb.append(QString::number(startyear));
sb.append("-0[");
sb.append(QString::number(startmonth+1));
sb.append("-9],");
sb.append(QString::number(startyear));
sb.append("-1[0-");
sb.append(QString::number(endmonth%10-1));
sb.append("])|");
}
sb.append(differentMonthDayReg(startyear,startmonthStr,startday,endyear,endmonthStr,endday));
}
else if(endmonth-startmonth==1)
{//只隔了一個月情況
sb.append(differentMonthDayReg(startyear,startmonthStr,startday,endyear,endmonthStr,endday));
}
else
{//同一個月的情況
if(endday/10-startday/10>1)
{
sb.append(QString::number(startyear));
sb.append("-");
sb.append(startmonthStr);
qDebug()<<"ceshi"<<startmonthStr;
sb.append("-[");
sb.append(QString::number(startday/10+1));
sb.append("-");
sb.append(QString::number(endday/10-1));
sb.append("]|");
sb.append(QString::number(startyear));
sb.append("-");
sb.append(startmonthStr);
sb.append("-");
sb.append(QString::number(startday/10));
sb.append("[");
sb.append(QString::number(startday%10));
sb.append("-9]|");
sb.append(QString::number(endyear));
sb.append("-");
sb.append(endmonthStr);
sb.append("-");
sb.append(QString::number(endday/10));
sb.append("[0-");
sb.append(QString::number(endday%10));
sb.append("]");
}
else if(endday/10-startday/10==1)
{
sb.append(QString::number(startyear));
sb.append("-");
sb.append(startmonthStr);
sb.append("-");
sb.append(QString::number(startday/10));
sb.append("[");
sb.append(QString::number(startday%10));
sb.append("-9]|");
sb.append(QString::number(endyear));
sb.append("-");
sb.append(endmonthStr);
sb.append("-");
sb.append(QString::number(endday/10));
sb.append("[0-");
sb.append(QString::number(endday%10));
sb.append("]");
}
else{
sb.append(QString::number(startyear));
sb.append("-");
sb.append(startmonthStr);
sb.append("-");
sb.append(QString::number(startday/10));
sb.append("[");
sb.append(QString::number(startday%10));
sb.append("-");
sb.append(QString::number(endday%10));
sb.append("]");
}
}
}
return sb;
}
QString MainWindow:: differentMonthDayReg(int startyear,QString startmonthStr,int startday,int endyear,QString endmonthStr,int endday)
{
QString sb;
if(startday/10<3){
sb.append("(");
sb.append((QString::number(startyear)));
sb.append("-");
sb.append(startmonthStr);
sb.append("-[");
sb.append(QString::number(startday/10+1));
sb.append("-3])|");
sb.append("(");
sb.append((QString::number(startyear)));
sb.append("-");
sb.append(startmonthStr);
sb.append("-");
sb.append(QString::number(startday/10));
sb.append("[");
sb.append(QString::number(startday%10));
sb.append("-9])|");
}
else {
sb.append("(");
sb.append((QString::number(startyear)));
sb.append("-");
sb.append(startmonthStr);
sb.append("-3[");
sb.append(QString::number(startday%10));
sb.append("-1])|");
}
if(endday/10>0)
{
sb.append("(");
sb.append(QString::number(endyear));
sb.append("-");
sb.append(endmonthStr);
sb.append("-[0-");
sb.append(QString::number(endday/10-1));
sb.append("])|");
sb.append("(");
sb.append(QString::number(endyear));
sb.append("-");
sb.append(endmonthStr);
sb.append("-");
sb.append(QString::number(endday/10));
sb.append("[0-");
sb.append(QString::number(endday%10));
sb.append("])");
}
else {
sb.append("(");
sb.append(QString::number(endyear));
sb.append("-");
sb.append(endmonthStr);
sb.append("-");
sb.append(QString::number(endday/10));
sb.append("[0-");
sb.append(QString::number(endday%10));
sb.append("])");
}
return sb;
}