C++ (Qt)//////////////////////////////////////////основная часть кода принадлежит bool Spreadsheet::sort_data_with_GUI(const QList<QTableWidgetSelectionRange>& range)//////////////////////////////QString error="";for(int it=0;it<range.size();it++) for(int i=0;i<range[it].rowCount();i++) for(int j=0;j<range[it].columnCount();j++) { if(!item(range[it].topRow()+i ,range[it].leftColumn()+j)||item(range[it].topRow()+i ,range[it].leftColumn()+j)->text()==""||isError_in_cell(range[it].topRow()+i ,range[it].leftColumn()+j)) { error+=tr("item: ")+get_header_label(range[it].leftColumn()+j)+QString::number(range[it].topRow()+i+1)+tr(" - is invalid\n"); } }////////////////////////////////////////////////////////////////////////////////////////////////////////////////bool Spreadsheet::isError_in_cell(int row,int column){ if(row<0||row>=rowCount()||column<0||column>=columnCount()) {return false;} if(item(row,column)) { item(row,column)->data(Qt::DisplayRole).toString().count(";"); if( item(row,column)->data(Qt::DisplayRole).toString().count(";")>0) {return true;}// у меня парсер вычесляет выражение в ячейке, если есть ошибка - идет перечисление через ; ошибок (2* -- 1:Syntax error;) else {return false;} } else {return false;}} QString Spreadsheet::get_header_label(int column_,bool *ok) //мое работает{ if(names_for_columns.value(column_)!="") { if(ok) *ok=true; return names_for_columns[column_]; } else { if(ok) *ok=false; return ""; }}
C++ (Qt)//////////////////////////////////////////основная часть кода принадлежит bool Spreadsheet::sort_data_with_GUI(const QList<QTableWidgetSelectionRange>& range)//////////////////////////////QString error=QString();for(int it=0;it<range.size();it++) for(int i=0;i<range[it].rowCount();i++) for(int j=0;j<range[it].columnCount();j++) { if(!item(range[it].topRow()+i ,range[it].leftColumn()+j)||item(range[it].topRow()+i ,range[it].leftColumn()+j)->text()==QString()||isError_in_cell(range[it].topRow()+i ,range[it].leftColumn()+j)) { error+=tr("item: ")+get_header_label(range[it].leftColumn()+j)+QString::number(range[it].topRow()+i+1)+tr(" - is invalid\n"); } }////////////////////////////////////////////////////////////////////////////////////////////////////////////////bool Spreadsheet::isError_in_cell(int row,int column){ if(row<0||row>=rowCount()||column<0||column>=columnCount()) {return false;} if(item(row,column)) { item(row,column)->data(Qt::DisplayRole).toString().count(";"); if( item(row,column)->data(Qt::DisplayRole).toString().count(";")>0) {return true;}// у меня парсер вычесляет выражение в ячейке, если есть ошибка - идет перечисление через ; ошибок (2* -- 1:Syntax error;) else {return false;} } else {return false;}} QString Spreadsheet::get_header_label(int column_,bool *ok) //мое работает{ if(names_for_columns.value(column_)!=QString()) { if(ok) *ok=true; return names_for_columns[column_]; } else { if(ok) *ok=false; return QString(); }}
C++ (Qt)inline bool ItemOk( QTableWidgetItem * item ){ if (!item) return false; if (item->text().isEmpty()) return false; return item->data(Qt::DisplayRole).toString().indexOf(";") == -1;}//////////////////////////////////////////основная часть кода принадлежит bool Spreadsheet::sort_data_with_GUI(const QList<QTableWidgetSelectionRange>& range)//////////////////////////////QString error;for(int it = 0; it < range.size(); it++) { int begR = range[it].topRow(); int endR = range[it].bottomRow(); for (int i = begR; i <= endR; i++) { int begC = range[it].leftColumn(); int endC = range[it].rightColumn(); for (int j = begC; j <= endC; j++) { if (!ItemOk(item(i, j)) error += QString("item at column %1, row %2 is invalid\n").arg(get_header_label(j)).arg(i); } } }}
C++ (Qt)bool Spreadsheet::UpdateProgress( QProgressDialog * progress, int row ){ //if ((row+1 ) % UPDATE_STEP) return true; // update once per UPDATE_STEP progress->setValue(row); //progress->show(); // calls processEvents for modal dialog return !progress->wasCanceled();}