2013-12-20 7 views
2

Я создаю QTableWidget, отображая некоторую информацию из созданной мной структуры. Однако, похоже, я только показываю строки в таблице, а не целые или двойные.Qt: QTableWidget добавление целых чисел в таблицу

Так как решение, я бросил свои двойники и целые числа в Строки, и они отлично отражены в моем столе. Но теперь я не могу правильно использовать сортировку, потому что он сортирует строки в алфавитном порядке, и я хочу, чтобы мои целые числа сортировались по значению.

Как сейчас: 15 16 2 33 4 66 8 Как должно быть: 2 4 8 15 16 33 66

Поэтому в основном я ищу способ добавить целых чисел в моей QTableView. Любые идеи?

Вот мой текущий код:

ui->tableWidget->setRowCount(lijst.size()); 
ui->tableWidget->setColumnCount(4); 
ui->tableWidget->setColumnWidth(0,200); 
QStringList TableHeader; 
TableHeader<<"Object"<<"Frames"<<"Views"<<"Percent"; 
ui->tableWidget->setHorizontalHeaderLabels(TableHeader); 

for(int i = 0; i< lijst.size();i++) 
{ 
    ui->tableWidget->setItem(i, 0, new QTableWidgetItem(lijst[i].name)); 
    ui->tableWidget->setItem(i, 1, new QTableWidgetItem(tr("%1").arg(lijst[i].nroFrames)); 
    ui->tableWidget->setItem(i, 2, new QTableWidgetItem(tr("%1").arg(lijst[i].nroViews))); 
    ui->tableWidget->setItem(i, 3, new QTableWidgetItem(tr("%1").arg(lijst[i].percent))); 
} 

Спасибо!

+0

Почему вы пытаетесь перевести целые числа? – UmNyobe

+0

, потому что я не могу добавить целые числа в TableWidgetItem, правильно? – Tcanarchy

+0

'tr' эквивалентно' QString' в этом случае и не относится к самой проблеме. – vahancho

ответ

0

Вы можете реализовать свой собственный элемент QTableWidget, который будет обрабатывать сравнение особым образом. Например:

class TableItem : public QTableWidgetItem 
{ 
public: 
    TableItem(const QString & text) 
     : 
      QTableWidgetItem(text) 
    {} 

    TableItem(int num) 
     : 
      QTableWidgetItem(QString::number(num)) 
    {} 

    bool operator< (const QTableWidgetItem &other) const 
    { 
     if (other.column() == 1) { 
      // Compare cell data as integers for the second column. 
      return text().toInt() < other.text().toInt(); 
     } 
     return other.text() < text(); 
    } 
}; 

С этим, вы просто должны создать TableItem вместо QTableWidgetItem:

ui->tableWidget->setItem(i, 1, new TableItem(tr("%1").arg(lijst[i].nroFrames)); 

или

ui->tableWidget->setItem(i, 1, new TableItem(lijst[i].nroFrames); 
+0

хорошо, но смогу ли я это сделать? 'int number = 5;' 'ui-> tableWidget-> setItem (i, 1, new TableItem (number));' – Tcanarchy

+0

неважно, я вижу, что это не нужно. Вы просто меняете текст обратно на целое, чтобы сравнить их. спасибо :) это будет работать :) – Tcanarchy

+0

@ пользователь2961097, да, на самом деле вы можете. Я обновил свой ответ с помощью перегруженного конструктора, поэтому вы можете просто создать 'новый TableItem (number)'. – vahancho

0

Другой вариант (проще я думаю) должен создать введите QTableWidgetItem и затем установите следующие данные:

QTableWidgetItem *theItem = new QTableWidgetItem(); 
int myNumber = 43; 
theItem->setData(Qt::EditRole, myNumber); //Accepts a QVariant 
theTableWidget->setItem(0, 0, theItem); 
0

Пожалуйста, не используйте QTablewidgetItem или QTableWidget, вместо этого используйте QTableView и QAbstractTableModel. Стоимость обслуживания меньше, а код более чистый.

классы:

  • YourTableView - исходные данные
  • YourSortModel - модель, которая будет делать сортировку/фильтрация
  • QTableView - что будет отображать stff.

Трудно начинать работу с Model View на Qt, но как только вы поймете основы, вы не вернетесь к ручному удалению с помощью виджетов.

Смежные вопросы