QT5 QtreeWidget 实现点击item事件以及右键菜单删除item 和 重命名item

1、new 一个QTreeWidget 对象,并设置头标签,和根节点(个人程序需要)

   QTreeWidget* treeWidget = ui.treeWidget;//我已经在ui设计师中拖了一个QTreeWidget

    QString headers;
    headers  = "Name" ;
    treeWidget->setHeaderLabel(headers);

    QStringList rootText;
    rootText  << "wells";
    root = new QTreeWidgetItem(treeWidget, rootText);        

2、添加 QTreeWidgetItem(这里是读取文件夹里文件的名字作为item的名字)

    for(int i = 2;i < fileList.size();i++)
    {

        QTreeWidgetItem *leaf = new QTreeWidgetItem(root, QStringList() <<fileList.at(i).fileName());
        leaf->setFlags(leaf->flags() | Qt::ItemIsEditable);
        root->addChild(leaf);
    }

3、点击item事件

 

connect(treeWidget,SIGNAL(itemClicked(QTreeWidgetItem*,int)), this,SLOT(checkself(QTreeWidgetItem* ,int)));//检测点击事件,信号槽机制

4、checkself(QTreeWidgetItem* ,int);函数是点击后的响应函数。在private slot:  下声明(这里的具体实现就不贴了)

5、右键弹出菜单

connect(treeWidget,SIGNAL(customContextMenuRequested(const QPoint&)), this,SLOT(popMenu(const QPoint&)));//检测鼠标右键

6、弹出菜单的响应函数  popMenu(const QPoint&)

void LWD::popMenu(const QPoint&)
{
    QTreeWidgetItem* curItem=treeWidget->currentItem();  //获取当前被点击的节点
    if(curItem==NULL)return;           //这种情况是右键的位置不在treeItem的范围内,即在空白位置右击
    QString wellName = curItem->text(0);
    if(wellName != "wells")
    {
        QAction deleteWell(QString::fromLocal8Bit("&删除该井"),this);//删除井
        QAction reNameWell(QString ::fromLocal8Bit("&重命名井"),this);//重命名井
        //在界面上删除该item
        connect(&deleteWell, SIGNAL(triggered()), this, SLOT(deleteItem()));
        connect(&reNameWell,SIGNAL(triggered()),this,SLOT(renameWell()));

        QPoint pos;
        QMenu menu(ui.treeWidget);
        menu.addAction(&deleteWell);
        menu.addAction(&reNameWell);
        menu.exec(QCursor::pos());  //在当前鼠标位置显示

    }
}

7、deleteItem()

void LWD::deleteItem()
{
    root->removeChild(treeWidget->currentItem());
    if(myW != NULL)
    {
        myW->setParent(NULL);
        ui.verticalLayout_4->removeWidget(myW);
    }
    //删除井数据文件
    QString dirPath = "../Data1/";
    dirPath.append(treeWidget->currentItem()->text(0));
    dirPath.append("/");
    DeleteDirectory(dirPath);//实现在下面

}
bool LWD::DeleteDirectory(const QString &path)
{
    if (path.isEmpty())
        return false;

    QDir dir(path);
    if(!dir.exists())
        return true;

    dir.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot);
    QFileInfoList fileList = dir.entryInfoList();
    foreach (QFileInfo fi, fileList)
    {
        if (fi.isFile())
            fi.dir().remove(fi.fileName());
        else
            DeleteDirectory(fi.absoluteFilePath());
    }

    return dir.rmpath(dir.absolutePath());
}

8、renameWell()

void LWD::renameWell()
{
    preName = treeWidget->currentItem()->text(0);
    prePath = "../Data1/";
    prePath.append(preName);
    ui.treeWidget->editItem(ui.treeWidget->currentItem());
    //t通过监控itemChanged事件来确定修改后的名字!!!!
    connect(treeWidget,SIGNAL(itemChanged( QTreeWidgetItem *,int )),this,SLOT(nameChanged(QTreeWidgetItem*  )));

}

void LWD::nameChanged(QTreeWidgetItem* item)
{
    //先重命名文件夹
    QString newName = treeWidget->currentItem()->text(0);
    QString newPath = "../Data1/";
    newPath.append(newName);
    QFile::rename(prePath,newPath);
    prePath = newPath.append("/");
    prePath.append(preName);
    prePath.append(".txt");
    //重命名井眼轨迹处理后的文件
    newPath.append("/");
    newPath.append(newName);
    newPath.append(".txt");
    QFile::rename(prePath,newPath);

}
时间: 2024-08-07 00:15:12

QT5 QtreeWidget 实现点击item事件以及右键菜单删除item 和 重命名item的相关文章

c#控制IE浏览器自动点击等事件WebBrowser,mshtml.IHTMLDocument2 .

c#控制IE浏览器自动点击等事件WebBrowser,mshtml.IHTMLDocument2 分类: c# 2013-02-06 15:18 3008人阅读 评论(0) 收藏 举报 可以实现例如通过应用程序操作google搜索,用户输入要搜索的内容,然后在google中搜索:可以自动点击网页上的按钮等功能 1. 加入对Microsoft Internet Controls的引用:    2. 加入对Microsoft HTML Object Library的引用: (要引入Microsoft

js和jquery中嵌套(点击)事件中,防止点击多次父事件,子事件执行多次

1 $("#a").bind("click",function(){ 2 alert('a'); 3 $("#b").bind("click",function(){ 4 alert('b'); 5 }) : 6 }); 7 /*这样连续点击a按钮后,在点击一次b按钮,会重复a按钮点击的次数,我给的解释是,按钮a点击一次,会监听b点击的事件,这样点击多次后,会相应地监听b多次事件.所以,如果只是想执 行最后一次b的点击事件,应

昨天所写的JQ 点击隐藏事件,关键性原理

JQ 点击隐藏事件,关键性原理 1.JQ 库的调用 一般选择为: 1)库越小越好 2)库的功能越强大越好 <script src="js/jquery.js" type="text/javascript"></script> 2.节点的选取 3.利用JQ 操作选取的节点的 ID 进行 事件的运行

深入A标签点击触发事件而不跳转的详解

本文介绍下,当点击A标签时,触发事件但不跳转的实现方法,有需要的朋友参考下吧. 点击页面上的空链接,点击后页面自动刷新,并会定位到页面顶端. 不过,有时需要点击#页面但不作跳转,可以这样写: <a href="#2">脚本学堂---网站编程</a> 在#后加上点别的东西即可,这样就不会链到别的页面,也不会刷新定位到顶端了. 附,A标签点击触发事件但不跳转的实现方法. 在a标签中有点击事件:1. a href="javascript:js_method(

v-charts修改点击图例事件,legendselectchanged

html: <!--折线图--><ve-line :extend="item.chartExtend" :data-zoom="dataZoom" :height="chartHeight" :legend="item.legend" :data="item" :events="chartEvents" :settings="isRateTypeData(it

阻止右键菜单(阻止默认事件)&amp;&amp;跟随鼠标移动(大图展示)&amp;&amp;自定义右键菜单

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

VS2013点击右键菜单命令添加xml元素插件开发

一.选择Visual Studio Package模板建立插件项目 由于此功能需要在右键菜单上添加命令,所以选择Visual Studio Package模板,根据模板向导步骤插件项目,在Select VSPackage Options步骤的时候选择Menu Command选项,如图-1所示: 图-1 接下来是设置命令的名称,如图-2所示 图-2 修改Command name的值,将其设置为我们要添加到右键菜单时的名称.Command ID可选择是否修改,值是一个十六进制数,由于标识我们的添加的

EasyUI 表格点击右键添加或刷新 绑定右键菜单

例1 在HTML页面中设置一个隐藏的菜单(前提是已经使用封装的Easyui) 代码: <div id="contextMenu_jygl" class="easyui-menu" style="width: 80px; display: none;">                              <div id="btn_More" data-options="iconCls:'ico

jquery实现的点击二级下拉导航菜单

jquery实现的点击二级下拉导航菜单:二级下拉导航菜单是各种类型的网站都有使用,所以是一个必须掌握的技能,对于老手来说肯定是轻松加愉快,但是对于初学者来说未必如此,下面就通过代码实例详细介绍一下点击二级下拉菜单实现过程.代码如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="htt