1. 程式人生 > >QT 用正則表示式從tableView中篩選出某一日期範圍內的資料

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