2017-01-11 5 views
0

Я действительно работаю над личным «Excel» для школы.is String или is Number function

Когда значение моей ячейки является числом (int), я хочу добавить его в свой списокNumber (QList int). Когда значение моей ячейки является строкой, я хочу добавить ее в свой списокString.

Эти два списка позволяют мне сортировать.

Проблема здесь:

QString test = text(i, j); 
test.toInt(&ok); 
if (ok == true) { 
    listNumber.append(test.toInt()); 
    qSort(listNumber.begin(), listNumber.end()); 
} 

ОШИБКА ASSERT failure in QList<T>::at: "index out of range" .

Я думаю, это потому, что он хочет «вставить» строку в списке целого.

Вот моя функция "сорт"

QList<QString> listString; 
QList<int> listNumber; 

bool ok; 
QTableWidgetSelectionRange range = selectedRange(); 

for (int j = range.leftColumn(); j <= range.rightColumn(); ++j) { 
    for (int i = range.topRow(); i <= range.bottomRow(); ++i) { 
     QString test = text(i, j); 
     test.toInt(&ok); 
     if (ok == true) { 
      listNumber.append(test.toInt()); 
      qSort(listNumber.begin(), listNumber.end()); 
     } 
    } 
} 

if (listNumber.count() == 0) { 
    QMessageBox test; 
    test.setText("liste vide"); 
    test.exec(); 
} 
else { 
    int x = 0; 
    for (int j = range.leftColumn(); j <= range.rightColumn(); ++j) { 
     for (int i = range.topRow(); i <= range.bottomRow(); ++i) { 

      Spreadsheet::setFormula(i, j, QString::number(listNumber.at(x))); 
      x++; 
     } 
    } 
} 

Спасибо вам большое за вашу помощь.

+0

Проблема в вызове 'listNumber.at (x)'. Ваше значение 'x' превышает размер контейнера' listNumber'. Вы должны убедиться, что этого не произойдет. – vahancho

+0

Я выполняю это условие: if (listNumber.count() = 0) -> то я ничего не делаю, мой x не может превышать размер, если в моем списке есть что-то в этом списке? – devicz

+0

О, я понимаю, ты прав! – devicz

ответ

0

Прежде всего, QSort в Qt является устаревшим и не рекомендуется использовать:

QT_DEPRECATED_X("Use std::sort") inline void qSort(...

Вы можете использовать std::sort вместо:

#include <algorithm> 
//... 
std::sort(listNumber.begin(), listNumber.end(), std::less<int>()); 

//or simply: 
std::sort(listNumber.begin(), listNumber.end()); // using default comparison (operator <) 

(Но также вы можете просто назвать устаревшим qSort :)

qSort(listNumber);