Теперь рассмотрим пример с применением объекта
QStringList row1, row2;
QSpreadsheetCompare compare;
…
if (compare(row1, row2)) {
// строка row1 меньше, чем row2
}
Объект
Можно использовать другой подход, когда ключи сортировки и признаки порядка сортировки хранятся в глобальных переменных и используется функция обычного типа
Ниже приводится реализация функции, которая применяется для сравнения двух строк электронной таблицы:
01 bool SpreadsheetCompare::operator(const QStringList &row1,
02 const QStringList &row2) const
03 {
04 for (int i = 0; i < KeyCount; ++i) {
05 int column = keys[i];
06 if (column != -1) {
07 if (row1[column] != row2[column]) {
08 if (ascending[i]) {
09 return row1[column] < row2[column];
10 } else {
11 return row1[column] > row2[column];
12 }
13 }
14 }
15 }
16 return false;
17 }
Этот оператор возвращает
Массивы
Мы сравниваем значения соответствующих ячеек двух строк, учитывая порядок ключей сортировки. Как только оказывается, что они различны, мы возвращаем соответствующее значение:
Теперь мы закончили класс
Создание подкласса QTableWidgetltem
Класс
01 #ifndef CELL_H
02 #define CELL_H
03 #include
04 class Cell : public QTableWidgetltem
05 {
06 public:
07 Cell;
08 QTableWidgetltem *clone const;
09 void setData(int role, const QVariant &value);
10 QVariant data(int role) const;
11 void setFormula(const QString &formula);
12 QString formula const;
13 void setDirty;
14 private:
15 QVariant value const;
16 QVariant evalExpression(const QString &str, int &pos) const;