C++

9.QT树状列表入门--Apple的学习笔记

2021-07-14  本文已影响0人  applecai

一,前言

做了那么多QT小练习后,我开始构思我要做的小工具了,虽然现在小工具没有具体需求,但是大致要用到哪些功能,我已经有了一些设想,所以里面会用到treeview功能。那么就先练习下。

二,需求

做一个树状目录,可以删除,添加及修改内容。需要2列,第二列为信息描述列。

三,遇到的问题

1. treeview如何添加自定义的右键菜单?
答:网上搜索了思路,需要设置treeview的policy。然后通过信号和槽连接customContextMenuRequested。我的实现如下

// 初始化UI时候设置
tree->setContextMenuPolicy(Qt::CustomContextMenu);
connect(tree, &QTreeView::customContextMenuRequested, this, &myWidget::ShowContextMenu);
// 槽函数
void myWidget:: ShowContextMenu(const QPoint& pos)
{
    QMenu menu;
    QAction* action1 = new QAction(&menu);
    action1->setObjectName("action1 ");
    action1->setText(tr("copy"));
    menu.addAction(action1 );
    //显示该菜单,进入消息循环
    menu.exec(mapToGlobal(pos)/*全局位置*/);
}

2.QT treeview教程是自己定义了treeitem和treemodule,item和module的含义?
答:从module view角度来说,没有听说有item的概念。所以item理解为任何结构的数据,module理解为组织这些module的组织方式,而Qtreeview就是用来显示module的。

3.官网为什么要自定义module?
答:上面一条已经解释了module中item数据。所以为了适配各种输入,所以官网用了txt中的文本,通过回车以及tab键拆分每行的item。然后关于子节点,官网通过检查首行字符缩进来区子节点层次。所以万一我不用txt还是其它格式的输入数据,那么能通过各种自定义的方法把数据和item关联的话,就不能直接使用Standardmodule一个个创建item了。

4.在treeview中如何编辑选中项(包括添加修改和删除)?
答:通过官网的editabletreemodel寻找设计思路。创建一个treeviem视图的selectionModel,从selectionModel获取选中item位置,然后在module中操作此位置的item值。当然最重要的前提是,需要绑定选中信号,然后才有了上述的操作。若仅设置单个元素,推荐使用currentChanged信号,仅设置单行,推荐使用currentRowChanged信号,设置多选,一般使用selectionChanged信号。

四,小结

本次没有做对应需求的代码实现,因为官网的example已经实现了我的需求,我只要看懂会用及修改即可。而自己一开始是直接用Standardmodule数据做了个treeview界面,不可编辑,而且若绑定各类输入信息确实不灵活。

上一篇下一篇

猜你喜欢

热点阅读