QTableView ------ Model-View-Control(MVC)架构(4)

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();

表头隐藏前:


表头隐藏后:

QTableView ------ Model-View-Control(MVC)架构(4)_第1张图片

如果要去掉表格中间的线条,是由showGrid这个属性来决定的,选择修改改属性,去掉网格线条:

tableView->setShowGrid(false);

去掉后的效果:

QTableView ------ Model-View-Control(MVC)架构(4)_第2张图片


上面的图标都还很小,原先用的QTableWidgetItem。现在数据条目采纳的是完全自定义的SearchItem,尺寸大概是100*60,比较大,那么默认情况下,QTableView的Cell就容纳不下了,条目都挤在一起,见下图:

QTableView ------ Model-View-Control(MVC)架构(4)_第3张图片


要设置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();  




你可能感兴趣的:(视图,view,Model,模型,QTableView)