Russian Qt Forum
Апрель 29, 2024, 18:21 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 ... 3 4 [5]   Вниз
  Печать  
Автор Тема: Трудоемкие задачи (прервать или продолжить). Как прервать?  (Прочитано 32398 раз)
daimon
Гость
« Ответ #60 : Декабрь 13, 2009, 23:11 »

Как можно оптимизировать Непонимающий

Код
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 "";
}
}
 
« Последнее редактирование: Декабрь 13, 2009, 23:17 от daimon » Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #61 : Декабрь 13, 2009, 23:22 »

небольшой совет - в качестве пустых строк используй QString()
Записан
daimon
Гость
« Ответ #62 : Декабрь 13, 2009, 23:37 »


Как можно оптимизировать Непонимающий

Код
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();
}
}
 
« Последнее редактирование: Декабрь 14, 2009, 00:04 от daimon » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #63 : Декабрь 14, 2009, 00:16 »

Как можно оптимизировать Непонимающий
Код
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); }
}
}
}
 
Записан
daimon
Гость
« Ответ #64 : Декабрь 14, 2009, 00:21 »

Спасибо
Записан
daimon
Гость
« Ответ #65 : Декабрь 14, 2009, 00:48 »

на большой операции со свойствами прогрессдиалога  range (0,0) setValue(0) интерфейс зависает

Код
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();
}
Эту функцию вызываю в цикле (большая задача)
Как можно исправить это (не хочется вычеслять процент выполнения задачи)?
Помогите
« Последнее редактирование: Декабрь 14, 2009, 10:45 от daimon » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #66 : Декабрь 14, 2009, 14:20 »

Эту функцию вызываю в цикле (большая задача)
Как можно исправить это (не хочется вычеслять процент выполнения задачи)?
Помогите
Раскомментировать первую строку (вы уже 3-й раз о том же спрашиваете  Улыбающийся)
Записан
daimon
Гость
« Ответ #67 : Декабрь 14, 2009, 17:48 »

В  том то и дело что при свойства (все по 0) интерфейс замирает
« Последнее редактирование: Декабрь 14, 2009, 17:55 от daimon » Записан
daimon
Гость
« Ответ #68 : Декабрь 15, 2009, 00:49 »

Зависание (отображается постоянный процент выполнения задачи) прогрессдиалога при перемещении. Как исправить?


« Последнее редактирование: Декабрь 15, 2009, 21:46 от daimon » Записан
Страниц: 1 ... 3 4 [5]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.13 секунд. Запросов: 23.