我有一个QTableWidget,第一列包含从1到1000的数字.现在我需要根据第一列对表进行排序.
我正在使用该功能sortItems(int column, Qt::AscendingOrder),但它显示为:
1,10,100,1000,101,102,......
但我需要这个结果:
1,2,3,4 ......,1000.
我正在使用CSV文件填充表格.
ale*_*sdm 22
这些值按字符串排序,因为您将它们存储在模型中.
该QVariant可以记住原始类型的数据的,如果你让它做转换本身,以及该类型排序时将使用的比较操作:
// Get the value from the CSV file as a numeric type
int valueFromCsvFile = ...;
// don't do this
QTableWidgetItem *item = new QTableWidgetItem(QString::number(valueFromCsvFile));
// but do this instead
QTableWidgetItem *item = new QTableWidgetItem;
item.setData(Qt::EditRole, valueFromCsvFile);
Run Code Online (Sandbox Code Playgroud)
单元格编辑器还将适应QVariant的类型:
QSpinBox对于int,QDoubleSpinBox为double和float,QDateTimeEdit 对于 QDateTimeChr*_*ris 11
最简单的方法可能是继承QTableWidgetItem,然后实现<运算符,以便你对数字而不是字符串进行排序.
class MyTableWidgetItem : public QTableWidgetItem {
public:
bool operator <(const QTableWidgetItem &other) const
{
return text().toInt() < other.text().toInt();
}
};
Run Code Online (Sandbox Code Playgroud)
然后,当您填充表时,您可以传递自定义项的实例,这些实例知道如何正确排序自己而不是通用排序项.