QTableView也是Qt的模型/视图(Model/View)架构中的一个组成部分,它提供了一个模型/视图框架的表格视图的默认实现。它常常配合QAbstractTableModel数据模型使用,可以用表格的形式显示出二维表格模型中的数据。
有必要说一下QTableView和QListView的区别。后者在Qt里一般只能显示单列数据(如果需要一些设置才能显示多列的话,此处实用为主,不是理论研究,所以未深究),而QTableView本身就是用于显示多列数据的。所以要根据自己的工程实际情况选择合适的工具。
外观
表格的垂直表头用verticalHeader()参数获得,水平表头用horizontalHeader()获得。每行的高度:rowHeight(),每列的宽度:columnWidth()。两个方向的表头都可以用hide()函数来隐藏。比如:
model=new SearchModel(this); tableView=new QTableView; tableView->setModel(model); tableView->verticalHeader()->hide(); tableView->horizontalHeader()->hide();
表头隐藏后:
如果要去掉表格中间的线条,是由showGrid这个属性来决定的,选择修改改属性,去掉网格线条:
tableView->setShowGrid(false);
去掉后的效果:
上面的图标都还很小,原先用的QTableWidgetItem。现在数据条目采纳的是完全自定义的SearchItem,尺寸大概是100*60,比较大,那么默认情况下,QTableView的Cell就容纳不下了,条目都挤在一起,见下图:
要设置QTableView的单元格尺寸,可以使用QHeaderView::ResizeSection(),也可以使用setColumnWidth(), setRowHeight()。两种方法的效果是一样的。以下代码中被注释掉的部分和其上面的几行代码具有相同的效果:
tableView->setColumnWidth(0,100); tableView->setColumnWidth(1,100); tableView->setRowHeight(0,60); tableView->setRowHeight(1,60); tableView->setRowHeight(2,60); // tableView->verticalHeader()->resizeSection(0,60); // tableView->verticalHeader()->resizeSection(1,60); // tableView->verticalHeader()->resizeSection(2,60); // tableView->horizontalHeader()->resizeSection(0,100); // tableView->horizontalHeader()->resizeSection(1,100);
以上都是逐行、逐列地设置,比较麻烦。如果要整体设置,可以用resizeColumnsToContents(),和resizeRowsToContents()。
tableView->resizeColumnsToContents(); tableView->resizeRowsToContents();