Qt:文件浏览器添加右击菜单实现重命名

本文详细介绍了在Qt中如何为QTreeView文件浏览器实现右击菜单,并着重讲解了如何处理只在Item上显示菜单以及实现重命名功能。在重命名功能中,通过委托机制进行后缀名检查,当后缀名更改时给出警告。在编译过程中遇到的两个错误分别是LNK2001和const成员函数的问题,文中也给出了相应的解决办法和参考资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     功能内容:

    1、实现右击菜单(重点:如何只在Item项上面弹出右击菜单,而在空白处不弹出菜单)

    2、实现重命名功能

    3、使用使用委托类实现对重命名检查,后缀名更改时给予警告

最后在编译程序时出现了2个编译错误(检查老半天才把问题纠察出来)。把相关错误写出来,给以后做参考!


1 实现右击菜单

    网上有很多资料讲解了右击菜单的实现。但大多数都是基于QListWidget视图,本人实现的浏览器是QtreeView视图,所以相对来说有部分不同。但都是大同小异。

 实现右键菜单, 必须重写下面这个函数

void QWidget::contextMenuEvent ( QContextMenuEvent * event )   [virtual protected]
  这个函数是QWidget的一个虚函数,使用时必须由QWidget的子类重写该函数。

本文中该函数的重新如下:

//实现右击菜单
void fileView::contextMenuEvent(QContextMenuEvent *event)
{
    QMenu* popMenu = new QMenu(this);
QModelIndex currIndex=this->tree->indexAt(tree->viewport()->mapFromGlobal(event->globalPos()));
 int i=currIndex.row();
    // qDebug()<<"right:"<<i;
   if(i!=-1)
   {
     QAction *Rename=new QAction(QObject::tr("Rename"),this);
     popMenu->addAction(Rename);
     connect(Rename,SIGNAL(triggered(bool)),this,SLOT(slotRename()));
   }
   popMenu->exec( QCursor::pos() );
}
说明:该函数实现与参考文献1中最大的差别就是关于通过鼠标位置确定来获取当前所对应的项。在QtreeView中没有ItemAt(widget_pos)函数,取而代之的是indexAt(viewport_pos)函数 该函数返回当前的模式索引QModelIndex.括号里的坐标参数也不一样 indexAt参数为视口坐标参数  Qt文档中indexAt()解释:

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值