QTreeView加载文件,实现右键菜单(QMenu)

QTreeView加载文件

初始化一个QFileSystemModel

     m_model = new QFileSystemModel(ui->treeView);   //初始化一个QFileSystemModel
    //m_model->setRootPath(QDir::currentPath());    //加载出所有磁盘文件
    ui->treeView->setModel(m_model);                //设置treeView的model

点击button加载文件

void MainWindow::on_Act_OpenFile_triggered()
{
    QString dir = QFileDialog::getExistingDirectory(this,"sss打开文件",QDir::currentPath());    //获取文件路径,返回QString
    if(!dir.isEmpty())
    {
        m_model->setRootPath(dir);                          //设置model根节点
        ui->treeView->setRootIndex(m_model->index(dir));    //设置treeView根节点索引
    }
}

treeView中右键加载菜单

设置treeView上下文菜单,没有这一步加载不出来

ui->treeView->setContextMenuPolicy(Qt::CustomContextMenu);      //设置treeView上下文菜单

connect(ui->treeView,&QTreeView::customContextMenuRequested,this, &MainWindow::slotCustomContextMenu);

QMenu实现菜单样式

void MainWindow::CreateMenu()
{
   qDebug()<<"CreateMenu";

   QModelIndex index = ui->treeView->currentIndex();

   QString fileName = ui->treeView->model()->data(index).toString();
   // m_MenuFuc = new QMenu(this);
    m_ActDel = m_MenuFuc->addAction(tr("删除"));
    m_ActRename = m_MenuFuc->addAction(tr("重命名"));
    m_ActCopy = m_MenuFuc->addAction(tr("拷贝"));
    m_ActShow = m_MenuFuc->addAction(tr("浏览"));
    //m_ActEdit = m_MenuFuc->addAction(tr("子菜单"));
    //m_MenuFuc->addSeparator();

    m_MenuTest = new QMenu(this);
    m_MenuTest->setTitle(tr("子菜单"));
    m_ActTest1 = m_MenuTest->addAction(tr("测试1"));
    m_ActTest2 = m_MenuTest->addAction(tr("测试2"));
    m_MenuFuc->addMenu(m_MenuTest);

    m_MenuFuc->exec(QCursor::pos());
    delete m_ActDel;
    delete m_ActRename;
    delete m_ActCopy;
    delete m_ActShow;
    delete m_MenuTest;
    //m_MenuTest->addMenu(m_MenuTest);
}

判断当前按下的Action,根据不同的Action完成不同操作

槽函数为不同action的不同操作

m_MenuFuc = new QMenu(this);
connect(m_MenuFuc,&QMenu::triggered,this, &MainWindow::slotActionTriggered);

slotActionTriggered槽函数的实现

void MainWindow::slotActionTriggered(QAction *action)
{
    QModelIndex index = ui->treeView->currentIndex();
    QString fileName = ui->treeView->model()->data(index).toString();
    if(action == m_ActDel)
    {
        qDebug()<<"删除被按下";
        qDebug()<<"fileName = "<<fileName;
    }
    if(action == m_ActRename)
    {
        qDebug()<<"重命名被按下";
        qDebug()<<"fileName = "<<fileName;
    }
    if(action == m_ActCopy)
    {
        qDebug()<<"拷贝被按下";
        qDebug()<<"fileName = "<<fileName;
    }
    if(action == m_ActShow)
    {
        qDebug()<<"浏览被按下";
        qDebug()<<"fileName = "<<fileName;
    }
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值