2017-01-11 8 views
0

私は実際には学校のための個人的な "Excel"に取り組んでいます。はStringまたはNumber関数です

私のセルの値が数値(int)の場合、私はそれを私のlistNumber(QList int)に追加したいと思います。私のセルの値が文字列の場合、私はそれを私のlistStringに加えたいと思う。

これらの2つのリストを使用すると、並べ替えを行うことができます。

問題はここにある:

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

ERROR 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

まず、Qtの中のqsortが廃止されており、それを使用しないことをお勧めします。

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); 
関連する問題