python tableview双击排序_QTableView 设置点击表头排序

1.  tableView->setSortingEnabled(true); 设置启用表排序

2. 在继承自QAbstractTableModel的类中声明这个基类的虚函数void sort(int column, Qt::SortOrder order); 因为这是一个虚函数Connect无法连接它, 所以我们还需要在下面在声明一个函数void sortTriggered(int column, Qt::SortOrder order);  用它来代替发出信号,  因为是信号,所以都没有实现,代码就不粘帖了.

3. 声明槽函数void sortComponents(int column, Qt::SortOrder order);

槽函数具体实现:

qSort(list.begin(), list.end(), [=](const Device& c1, const Device& c2)->bool{

Device cc1 = c1;

Device cc2 = c2;

if(order == Qt::AscendingOrder)

return DeviceTableModel::dataAtColumn(column, &cc1) <

DeviceTableModel::dataAtColumn(column, &cc2);

else

return DeviceTableModel::dataAtColumn(column, &cc1) >

DeviceTableModel::dataAtColumn(column, &cc2);

});

函数QVariant DeviceTableModel::dataAtColumn(int col, Device* c) 的实现

QVariant DeviceTableModel::dataAtColumn(int col, Device* c)

{

switch (col)

{

//    case  0: return c->id;

case  0: return c->name;

case  1: return c->region;

case  2: return c->number;

case  3: return c->device;

case  4: return c->creatDate;

case  5: return c->newmodifyDate;

case  6: return c->useDate;

default:

break;

}

return QVariant();

}

槽函数我根据业务拆分了两个方法, 嫌麻烦也可以直接写一个方法里.

4. 最后 connect(d->tableModel, &DeviceTableModel::sortTriggered, this, &DeviceView::sortComponents);

qSort函数帮助我们实现很多细节, 不管是字符串还是数字都会自己排序, 所以比对数字大小这些细节就不用做了.

大概流程就是

先启用QTableView的表排序 设置为True. 然后声明基类的虚函数, 因为无法直接连接这个函数 我们在声明一个信号, 在这个虚函数中只有一条代码就是发出后面声明的这个信号. 然后写槽函数,具体内容根据业务. 最后连接这个信号和槽即可.


版权声明:本文为weixin_36047538原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。