(7条消息) Qt5.9中表格控件QTableView用法示例
本文章主要总结QTableView类的用法,主要通过一个简单的实例,说明QTableView类用法。
本文的例子主要采用垂直布局,在该布局上添加一个按钮控件和表格QTableView控件。其中,表格控件表头有三列,名称分别为“序号”,“名称”,“地址”。然后在该表格内,添加一百行内容。再删除从第0行到第9行的表格内容,具体的例子如下所述。
1.1新建一个widget工程,不用勾选ui界面。然后分别在widget.h,widget.cpp,main.cpp中,分别添加下如下代码:
widget.h
#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include <QVBoxLayout>#include <QPushButton>#include <QStandardItem>#include <QStandardItemModel>#include <QTreeView>#include <QTableView>#include <QHeaderView> //tableView->horizontalHeader()->setSectionResizeMode(0,QHeaderView::Stretch);class Widget : public QWidget{Q_OBJECTpublic:Widget(QWidget *parent = 0);~Widget();void CreateView();private:QPushButton *testBtn;QVBoxLayout *mainLayout;// QTreeView *treeView;QStandardItemModel *standItemModel;QTableView *tableView;};#endif // WIDGET_Hwidget.cpp#include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent){CreateView();}Widget::~Widget(){}void Widget::CreateView(){mainLayout = new QVBoxLayout; //垂直布局mainLayout->setSpacing(10); //设置控件间距mainLayout->setMargin(10); //设置边缘间距testBtn = new QPushButton("Test");//添加QTableView代码tableView = new QTableView;standItemModel = new QStandardItemModel();//添加表头standItemModel->setColumnCount(3);standItemModel->setHeaderData(0,Qt::Horizontal,QStringLiteral("序号")); //设置表头内容standItemModel->setHeaderData(1,Qt::Horizontal,QStringLiteral("名称"));standItemModel->setHeaderData(2,Qt::Horizontal,QStringLiteral("地址"));//向表格添加100行内容for(int i=0;i<100;i++){QStandardItem *standItem1 = new QStandardItem(tr("%1").arg(i+1));QStandardItem *standItem2 = new QStandardItem(tr("第%1行").arg(i+1));standItemModel->setItem(i,0,standItem1); //表格第i行,第0列添加一项内容standItemModel->item(i,0)->setForeground(QBrush(QColor(255,0,0))); //设置字符颜色standItemModel->item(i,0)->setTextAlignment(Qt::AlignCenter); //设置表格内容居中standItemModel->setItem(i,1,standItem2); //表格第i行,第1列添加一项内容}tableView->setModel(standItemModel); //挂载表格模型//设置表格属性tableView->horizontalHeader()->setDefaultAlignment(Qt::AlignCenter); //表头信息显示居中tableView->horizontalHeader()->setSectionResizeMode(0,QHeaderView::Fixed); //设定表头列宽不可变tableView->horizontalHeader()->setSectionResizeMode(1,QHeaderView::Fixed);tableView->horizontalHeader()->setSectionResizeMode(2,QHeaderView::Stretch);//设定第2列表头弹性拉伸tableView->setColumnWidth(0,100); //设定表格第0列宽度tableView->setColumnWidth(1,200);tableView->verticalHeader()->hide(); //隐藏默认显示的行头tableView->setSelectionBehavior(QAbstractItemView::SelectRows); //设置选中时整行选中tableView->setEditTriggers(QAbstractItemView::NoEditTriggers); //设置表格属性只读,不能编辑// tableView->setContextMenuPolicy(Qt::CustomContextMenu); //需要在表格使用右键菜单,需要启动该属性// tableView->sortByColumn(0,Qt::AscendingOrder); //表格第0列,按降序排列standItemModel->removeRows(0,10); //删除从第0行开始的连续10行mainLayout->addWidget(testBtn);mainLayout->addWidget(tableView); //添加控件this->setLayout(mainLayout); //显示垂直布局}main.cpp#include "widget.h"#include <QApplication>int main(int argc, char *argv[]){QApplication a(argc, argv);Widget w;w.resize(960,640);w.setWindowTitle(QString::fromUtf8("表格控件QTableView用法示例"));w.show();return a.exec();}
1.2程序构建和运行后,结果如下图所示:

总结:表格控件QTableView VS 树形控件QTressView
表格控件QTableView跟树形控件QTressView用法类似,都是通过函数QTableView::setModel(QStandItemModel)来挂载一个QStandItemModel模型。
主要区别是QStandItemModel模型的设置方式不同。挂载到表格控件QTableView时,QStandItemModel模型需要定义表头,需要用到类QHeaderView来设置表头。
参考内容:
https://blog.csdn.net/u014563989/article/details/45585783(重点参考)
https://blog.csdn.net/imxiangzi/article/details/49204817
https://blog.csdn.net/naibozhuan3744/article/details/80816660
赞 (0)

