在使用tableview中有时候会需要列信息按一定的顺序进行排序,如按文件按照名称、修改日期、类型、大小进行排序。
而Qt中则存在着可以通过点击表头来对列表进行排序的方法:
首先,先创建一个简单的tableview表格:
void CHeaderWidget::propertyModel()
{
m_model->setColumnCount(2);//设置2列
m_model->setHeaderData(0, Qt::Horizontal, QString::fromLocal8Bit("第一列"));
m_model->setHeaderData(1, Qt::Horizontal, QString::fromLocal8Bit("第二列"));
m_model->setRowCount(5);//设置5行
m_tableView->setModel(m_model);
//设置成灰白交替形式显示
m_tableView->setAlternatingRowColors(true);
//每个格子显示的内容
m_model->setItem(0, 0, new QStandardItem(QString::fromLocal8Bit("NO.1")));
m_model->setItem(1, 0, new QStandardItem(QString::fromLocal8Bit("NO.2")));
m_model->setItem(2, 0, new QStandardItem(QString::fromLocal8Bit("NO.7")));
m_model->setItem(3, 0, new QStandardItem(QString::fromLocal8Bit("NO.4")));
m_model->setItem(4, 0, new QStandardItem(QString::fromLocal8Bit("NO.31")));
m_model->setItem(0, 1, new QStandardItem(QString::fromLocal8Bit("1")));
m_model->setItem(1, 1, new QStandardItem(QString::fromLocal8Bit("2")));
m_model->setItem(2, 1, new QStandardItem(QString::fromLocal8Bit("3")));
m_model->setItem(3, 1, new QStandardItem(QString::fromLocal8Bit("4")));
m_model->setItem(4, 1, new QStandardItem(QString::fromLocal8Bit("5")));
//隐藏行表头。
m_tableView ->verticalHeader()->hide();
}
在构造函数中设置排序:
CHeaderWidget::CHeaderWidget(QWidget *parent)
: QWidget(parent)
{
this->resize(500,500);
m_model = new QStandardItemModel(this);
m_tableView = new QTableView(this);
propertyModel();
//以下则为排序的方式
QSortFilterProxyModel *pProxyModel = new QSortFilterProxyModel(this);
// 设置数据源模型
pProxyModel->setSourceModel(m_model);
m_tableView->setModel(pProxyModel);
// 设置为可排序
m_tableView->setSortingEnabled(true);
// 按照文件名升序形式排序
m_tableView->sortByColumn(i,Qt::AscendingOrder);
}
结果如图显示: