欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

J_4 使用QTableView和在QTableView上右键增加菜单

程序员文章站 2022-03-22 08:40:26
1、接着上一讲的软件项目,如视频所示,在form1.ui中拖上一个TableView控件,并设置form1布局为栅格布局;2、如视频所示,右键点击QTableView,点击“go to slot”,选择“clicked()”,在form1.cpp中自动添加了方法:void Form1::on_tableView_clicked(const QModelIndex &index),在这个方法中,添加代码:theIndex = index;获得鼠标点击该行时的 QModelIndex数据结构...

1、接着上一讲的软件项目,如视频所示,在form1.ui中拖上一个TableView控件,并设置form1布局为栅格布局;

2、如视频所示,右键点击QTableView,点击“go to slot”,选择“clicked()”,在form1.cpp中自动添加了方法:void Form1::on_tableView_clicked(const QModelIndex &index),在这个方法中,添加代码:

theIndex = index;

获得鼠标点击该行时的 QModelIndex数据结构,这个数据结构包含了鼠标点击的行号信息;

3、在form1.h中,添加两个方法和一些私有变量:

void Init();

void InitialModel();

QStandardItemModel* fieldmodel;

QAction* myActionAdd;

QAction* myActionDelete;

QMenu* myMenu;

QList<ViewData> mlist;

QModelIndex theIndex;

int deleteRow;

4、在form1.cpp中,void Form1::Init()方法中,添加如下代码:

this->setWindowTitle(tr("方案进程"));

fieldmodel = new QStandardItemModel();

fieldmodel->setColumnCount(1);

ui->tableView->setModel(fieldmodel);

ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);//选择整行高亮

myMenu = new QMenu();

myActionAdd = new QAction(this);

myActionDelete = new QAction(this);

myActionAdd->setText("增加");

myActionDelete->setText("删除");

myMenu->addAction(this->myActionAdd);

myMenu->addAction(this->myActionDelete);

connect(this->myActionAdd,SIGNAL(triggered()),this,SLOT(actionAdd()));

connect(this->myActionDelete,SIGNAL(triggered()),this,SLOT(actionDelete()));

 

ui->tableView->addAction(this->myActionAdd);

ui->tableView->addAction(this->myActionDelete);

ui->tableView->setContextMenuPolicy(Qt::ActionsContextMenu);

此方法创建了一个TableView的数据模型 fieldmodel,将TableView与 fieldmodel通过ui->tableView->setModel(fieldmodel)绑定,创建了两个QAction:“增加”、“删除”,并通过

connect(this->myActionAdd,SIGNAL(triggered()),this,SLOT(actionAdd()));

将“增加”QAction与槽函数 actionAdd()联系起来,同理,“删除”QAction与槽函数 actionDelete()相联;

5、在void Form1::InitialModel()方法中,初始化数据模型 fieldmodel的列名称,增加代码:

fieldmodel->clear();//注意:在clear之后,表头名称也被清除了,需再设置表头

fieldmodel->setHorizontalHeaderItem(0, new QStandardItem("方案号"));

fieldmodel->setHorizontalHeaderItem(1, new QStandardItem("序号"));

fieldmodel->setHorizontalHeaderItem(2, new QStandardItem("阶段名称"));

6、在form1.h中,申明两个槽函数:

void actionAdd();

void actionDelete();

7、在 在form1.cpp中,void Form1::actionAdd()方法中增加代码:

int num = fieldmodel->rowCount();

fieldmodel->setItem(num, 0, new QStandardItem(QString("%1").arg(num)));

fieldmodel->setItem(num, 1, new QStandardItem(QString("%1").arg(1)));

fieldmodel->setItem(num, 2, new QStandardItem("mytestName"));

完成点击“增加”菜单时,数据模型 fieldmodel增加一条记录;

8、void Form1::actionDelete()方法中增加代码:

deleteRow = theIndex.row();

fieldmodel->removeRows(deleteRow,1);

完成的是,当鼠标点击某一行时,接着点击右键“删除”菜单时,删除该行;

需要观看运行效果或需要完整源代码,请到www.toutiao.com/i6847506648659919363/链接评论区写上你的邮箱

本文地址:https://blog.csdn.net/zhulicaozhu/article/details/107280271