一、项目介绍
本文将详解QTableView表格视图的相关数据角色role,代码基本内容与上文类似,上文:Qt实战案例(26)——利用QTableView表格视图实现右击菜单删除功能。
二、项目基本配置
新建一个Qt案例,项目名称为“TableView”,基类选择“QWidget”,取消创建UI界面复选框的选中状态,完成项目创建。
三、UI界面设计
无UI界面
四、主程序实现
4.1 role介绍
首先来看一下Qt中数据角色role的相关介绍:
Constant | Value | Description |
---|---|---|
Qt::DisplayRole | 0 | 以文本方式显示数据(QString) |
Qt::DecorationRole | 1 | 将数据作为图标来装饰(QColor, QIcon or QPixmap) |
Qt::EditRole | 2 | 可编辑的数据信息表示(QString) |
Qt::ToolTipRole | 3 | 作为工具提示显示(QString) |
Qt::StatusTipRole | 4 | 作为状态栏中显示的数据(QString) |
Qt::WhatsThisRole | 5 | 作为帮助信息栏中显示的数据(QString) |
Qt::FontRole | 6 | 设置字体(QFont) |
Qt::TextAlignmentRole | 7 | 设置模型数据的文本对齐(Qt::AlignmentFlag) |
Qt::BackgroundRole | 8 | 设置模型数据的背景色(QBrush) |
Qt::SizeHintRole | 13 | 将提供给视图的项的大小提示 (QSize) |
当role值不同时,则显示在视图上的方式也不同。
4.2 widget.h头文件
头文件声明如下:
public:
Widget(QWidget *parent = nullptr);
~Widget();
QTableView view;
QStandardItemModel model;
QMenu menu;
QStandardItem itemA;
QStandardItem itemB;
QStandardItem itemC;
QStandardItem itemD;
QStandardItem itemE;
QStandardItem itemF;
bool eventFilter(QObject* obj, QEvent *evt);//事件过滤器
public slots:
void onDelete(void);
4.3 widget.cpp源文件
源文件主要代码如下:
Widget::Widget(QWidget *parent)
: QWidget(parent),
view(this),
model(this),
menu(this)
{
resize(200,150);//调整窗体大小
//为itemA设置text
itemA.setData("A",Qt::DisplayRole);
//为itemB设置图标
QPixmap pix(":/img/user.png");
pix = pix.scaled(24,24,Qt::KeepAspectRatio);
itemB.setData(pix,Qt::DecorationRole);
//为itemC设置工具提示显示
itemC.setData("C",Qt::ToolTipRole);
//为itemD设置字体属性
QFont font("Times", 10, QFont::Bold);
itemD.setData("D",Qt::DisplayRole);
itemD.setData(font,Qt::FontRole);
//为itemE设置对齐方式
itemE.setData("E",Qt::DisplayRole);
itemE.setData(Qt::AlignHCenter,Qt::TextAlignmentRole);
//为itemF设置渐变背景色
QLinearGradient back(0,0,100,30);
back.setColorAt(0,Qt::white);
back.setColorAt(0.5,Qt::green);
back.setColorAt(1,Qt::blue);
itemF.setData(QBrush(back),Qt::BackgroundRole);
//设置表格的相应数值
model.setItem(0,0, &itemA);
model.setItem(0,1, &itemB);
model.setItem(1,0, &itemC);
model.setItem(1,1, &itemD);
model.setItem(2,0, &itemE);
model.setItem(2,1, &itemF);
model.setItem(3,0, new QStandardItem("G"));
model.setItem(3,1, new QStandardItem("H"));
//设置视图只能选中一行,取消焦点,禁止编辑
view.setFocusPolicy(Qt::NoFocus);//取消焦点
view.setEditTriggers(QAbstractItemView::NoEditTriggers);//设置无法编辑
view.setSelectionMode(QAbstractItemView::SingleSelection);//设置视图只能选择一个项目
view.setSelectionBehavior(QAbstractItemView::SelectRows);//设置视图只能选择行
view.setModel(&model);//视图显示模型
view.installEventFilter(this);//设置事件过滤器
menu.addAction("删除",this,SLOT(onDelete())); //设置菜单项,并连接槽函数
}
其他代码如槽函数、事件过滤器等与上文相同,这里不进行详细说明。
五、效果演示
完整效果如下:
如果没有看懂的话,完整代码可以参考:https://download.csdn.net/download/didi_ya/77078130
ok,以上便是本文的全部内容了,如果对你有所帮助,记得点个赞哟~