J_4 使用QTableView和在QTableView上右键增加菜单
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