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