QT 用正则表达式从tableView中筛选出某一日期范围内的数据


 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;
}
 

猜你喜欢

转载自blog.csdn.net/ls1300005/article/details/9408227