qt中listview和tableview(J4使用QTableView和在QTableView上右键增加菜单)

1、接着上一讲的软件项目,如视频所示,在form1.ui中拖上一个TableView控件,并设置form1布局为栅格布局;,下面我们就来聊聊关于qt中listview和tableview?接下来我们就一起去了解一下吧!

qt中listview和tableview(J4使用QTableView和在QTableView上右键增加菜单)

qt中listview和tableview

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

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

运行效果如视频所示:

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页