2013-12-20 29 views
2

我正在創建一個QTableWidget,它顯示了我創建的結構中的一些信息。 但是,我似乎只能在表格中顯示字符串,而不是整數或雙精度。Qt:QTableWidget將整數添加到表

所以作爲一個解決方案,我把我的雙打和整數轉換成了字符串,並且它們在我的表格中完美顯示。 但現在我無法正確使用sortfunction,因爲它按字母順序對字符串進行排序,並且我希望我的整數按值排序。

現在它是如何爲: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

@ user2961097,是的,其實你可以。我用重載的構造函數更新了我的答案,所以你可以簡單地執行'new 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。

在Qt模型視圖上很難啓動,但只要您瞭解了基本知識,就不會再回到手動使用小部件去除。