QTableView view(this);
QStandardItemModel model(this);
/*设置表头水平标题*/
model.setHorizontalHeaderItem(0,new QStandardItem("Name"));
model.setHorizontalHeaderItem(1,new QStandardItem("Sex"));
model.setHorizontalHeaderItem(2,new QStandardItem("Age"));
model.horizontalHeaderItem(0)->setFont(QFont("Helvetica",20,50)); //设置标题字体
/*设置表头垂直标题*/
model.setVerticalHeaderItem(0,new QStandardItem("No.1"));
model.setVerticalHeaderItem(1,new QStandardItem("No.2"));
model.setVerticalHeaderItem(2,new QStandardItem("No.3"));
/*设置列表条目数据*/
QPixmap pix(":user.png");
pix = pix.scaled(24,24,Qt::KeepAspectRatio);
QStandardItem *itemA=new QStandardItem();
itemA->setData(pix,Qt::DecorationRole); //设置条目图标
itemA->setData("A",Qt::DisplayRole);
itemA->setData("A:tooltip",Qt::ToolTipRole);
itemA->setData(QFont("宋体",12,QFont::Bold,true),Qt::FontRole); //设置条目字体
itemA->setData(Qt::AlignCenter,Qt::TextAlignmentRole); //设置条目中心对齐
QLinearGradient linearGradient(0,0,100,20);
linearGradient.setColorAt(0.2, Qt::white);
linearGradient.setColorAt(0.6, Qt::green);
linearGradient.setColorAt(1.0, Qt::black);
itemA->setData(QBrush(linearGradient),Qt::BackgroundRole); //设置条目背景色(为渐变色)
model.setItem(0,0,itemA);
model.setItem(0,1,new QStandardItem("B"));
model.setItem(1,0,new QStandardItem("C"));
model.item(0,1)->setTextAlignment(Qt::AlignCenter); //设置条目居中对齐
/*将数据模型的第一列进行下降排序(从大到小,不会进行整行排序)*/
model.sort(0,Qt::DescendingOrder);
对于QStandardItem的setData()成员 函数的第二个参数role 是模型数据角色
当role值不同时,则显示在视图上的方式也会不同
对于role角色,常用的值有:
实现右击菜单
当用户在QTableView视图里右击鼠标时,便会触发一个QEvent::ContextMenu类型的事件,所以通过事件过滤器来实现右击菜单效果
步骤:
效果:
代码如下
Widget.h:
#ifndef WIDGET_H
#define WIDGET_H
#include <QtGui>
class Widget : public QWidget
{
Q_OBJECT
QTableView view;
QStandardItemModel model;
QMenu menu;
public:
explicit Widget(QWidget *parent = 0);
bool eventFilter(QObject* obj, QEvent *evt);
public slots:
void onDelete(void);
};
#endif // WIDGET_H
Widget.cpp:
#include "widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
view(this),
model(this),
menu(this)
{
model.setItem(0,0, new QStandardItem("A"));
model.setItem(0,1, new QStandardItem("B"));
model.setItem(1,0, new QStandardItem("C"));
model.setItem(1,1, new QStandardItem("D"));
model.setItem(2,0, new QStandardItem("E"));
model.setItem(2,1, new QStandardItem("F"));
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())); //设置菜单项,并连接槽函数
}
void Widget::onDelete(void)
{
model.removeRow(view.currentIndex().row()); //更据当前鼠标所在的索引的行位置,删除一行
}
bool Widget::eventFilter(QObject* obj, QEvent *evt)
{
if(obj == &view && evt->type() == QEvent::ContextMenu)
{
if(view.currentIndex().isValid()==true)
{
menu.exec(cursor().pos()); //在当前鼠标位置上运行菜单menu对象
}
}
return QWidget::eventFilter(obj,evt);
}
main函数:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有