当前位置: 移动技术网 > IT编程>开发语言>C/C++ > J_4 使用QTableView和在QTableView上右键增加菜单

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

2020年07月13日  | 移动技术网IT编程  | 我要评论

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);

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

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

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网