首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >QTableWidget中的自定义排序

QTableWidget中的自定义排序
EN

Stack Overflow用户
提问于 2013-09-06 08:55:04
回答 3查看 8.6K关注 0票数 3

我有一个QTableWidget,我正在使用它的默认排序功能,通过标题列,但我在QTableWidget中的一个列是整数类型,通过QTableWidget默认排序,它像string.So一样排序。有什么方法可以使用我自己的QTableWidget排序函数吗?

EN

回答 3

Stack Overflow用户

发布于 2013-09-06 15:17:32

您可以尝试将QTableWidgetItem子类化并重新实现它的operator<()。在您的QTableWidget中使用此自定义项目,而不是默认的QTableWidgetItems。如下所示:

代码语言:javascript
运行
复制
class Item: public QTableWidgetItem
{

 public:
     [..]
     bool operator< (const QTableWidgetItem &other) const
     {
         // TODO: To be safe, check weather conversion to int is possible.
         return (this->text().toInt() < other.text().toInt());
     }
     [..]
 };

在您的表小部件中:

代码语言:javascript
运行
复制
[..]
QTableWidgetItem *newItem = new Item("1");
tableWidget->setItem(row, column, newItem);
[..]
票数 4
EN

Stack Overflow用户

发布于 2013-09-06 09:31:52

我不确定,但我不认为有一种简单的方法来改变QTableWidget的排序行为。

对于使用默认模型的QTableView,QTableWidget只是一个方便的类。不能保证,但会尝试做什么:

模型继承了QTableView的QTableWidget ()方法。使用它,您应该能够获得小部件的模型:

代码语言:javascript
运行
复制
QAbstractItemModel *model = yourTableWidget->model();

这是最简单的部分。现在您需要一个自定义QSortFilterProxyModel,您可以在其中覆盖virtual bool lessThan(const QModelIndex & left, const QModelIndex & right) const方法。

最后:

代码语言:javascript
运行
复制
YourCustomFilterProxyModel *proxyModel = new YourCustomFilterProxyModel(this);
proxyModel->setSourceModel(model);
yourTableWidget->setModel(proxyModel);

到目前为止,我不能保证我从未尝试过替换QTableWidget中的默认模型。如果可能,您应该查看Qt视图和模型。最初,它们看起来很难使用,但让它们变得舒适是值得的。Qt3的QTableWidget只是一个古老的遗物。

票数 0
EN

Stack Overflow用户

发布于 2014-06-11 14:02:50

您确定它没有很好地对数据进行排序吗?确保在那里添加数字,而不是字符串。因此,要将40添加到QTableWidget行,您可以使用以下数据:

代码语言:javascript
运行
复制
36: {'firstname': 'b', 'lastname': '111', 'email': 'foo@gmail.com',
                     'affiliate': 'Stuart Little', 'total_account_value': 40},

而不是这样:

代码语言:javascript
运行
复制
36: {'firstname': 'b', 'lastname': '111', 'email': 'foo@gmail.com',
                     'affiliate': 'Stuart Little', 'total_account_value': '40'},

QTableWidget会将其识别为整数,并对其进行良好的排序

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18648215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档