Добрый день уважаемые форумчане я делаю файловый менеджер посредством qfilesytemmodel+qtreeview.
Возникла у меня проблема небольшая проблема
mainwindow.h#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QFileSystemModel>
#include <QMessageBox>
#include <QString>
#include <QStringListModel>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_treeView_clicked(const QModelIndex &index);
void on_treeView_2_clicked(const QModelIndex &index);
void on_treeView_customContextMenuRequested(const QPoint &pos);
void on_treeView_2_customContextMenuRequested(const QPoint &pos);
private:
Ui::MainWindow *ui;
public:
int r;
int e;
QFileSystemModel *model1;
QFileSystemModel *model2;
QMessageBox msg;
QStringList path;
QStringList path2;
QStringListModel stringmodel;
QStringListModel stringmodel2;
QMenu *menu;
QAction *kopirov;
QAction *udalit;
QAction *vyrezat;
QAction *vstavit;
QAction *pereim;
QAction *sozd;
QAction *prosmotr;
};
#endif // MAINWINDOW_H
mainwindow.cpp#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
model1=new QFileSystemModel();
model2=new QFileSystemModel();
model1->setRootPath(QDir::currentPath());
model1->setFilter(QDir::AllDirs | QDir::Files |QDir::NoDotAndDotDot);
ui->treeView->setModel(model1);
ui->treeView->hideColumn(2);
ui->treeView->setAcceptDrops(true);
ui->treeView->setDragEnabled(true);
ui->treeView->setDragDropMode(QAbstractItemView::DragDrop);
ui->treeView->setContextMenuPolicy(Qt::CustomContextMenu);
model2->setRootPath(QDir::currentPath());
model2->setFilter(QDir::AllDirs | QDir::Files |QDir::NoDotAndDotDot);
ui->treeView_2->setModel(model2);
ui->treeView_2->hideColumn(2);
ui->treeView_2->setAcceptDrops(true);
ui->treeView_2->setDragEnabled(true);
ui->treeView_2->setDragDropMode(QAbstractItemView::DragDrop);
ui->treeView_2->setContextMenuPolicy(Qt::CustomContextMenu);
menu=new QMenu;
kopirov= new QAction(QString::fromLocal8Bit("Копировать"),this);
vyrezat=new QAction(QString::fromLocal8Bit("Вырезать"),this);
vstavit=new QAction(QString::fromLocal8Bit("Вставить"),this);
udalit=new QAction(QString::fromLocal8Bit("Удалить"),this);
pereim=new QAction(QString::fromLocal8Bit("Переименовать"),this);
sozd=new QAction(QString::fromLocal8Bit("Создать"),this);
//prosmotr=new QAction(QString::fromLocal8Bit("Просмотр"),this);
menu->addAction(kopirov);
menu->addAction(udalit);
menu->addAction(vyrezat);
menu->addAction(vstavit);
menu->addAction(pereim);
menu->addAction(sozd);
//menu->addAction(prosmotr);
vstavit->setVisible(false);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_treeView_clicked(const QModelIndex &index)
{
bool q=model1->isDir(index); // В случае если объект папка
if (q)
{
//int i;
QString str=model1->fileInfo(index).absoluteFilePath(); // взятие абсолютного пути
if (!path.contains(str)) // в случае если путь не содержитьсся в списке
{
path<<str; // то добавляем его
}
else
{
for (int i=0;i<path.size();i++)
{
if (path
==str)
{
path.removeAt(i);
}
}
}
r=path.size(); // определения количества элементов в списке
stringmodel.setStringList(path);
ui->listView->setModel(&stringmodel);
}
}
void MainWindow::on_treeView_2_clicked(const QModelIndex &index)
{
bool q=model2->isDir(index); // В случае если объект папка
if (q)
{
QString str=model2->fileInfo(index).absoluteFilePath(); // взятие абсолютного пути
if (!path2.contains(str)) // в случае если путь не содержитьсся в списке
{
path2<<str; // то добавляем его
}
else
{
for (int i=0;i<path2.size();i++)
{
if (path2==str)
{
path2.removeAt(i);
}
}
}
e=path2.size(); // определения количества элементов в списке
stringmodel2.setStringList(path2);
ui->listView_2->setModel(&stringmodel2);
}
}
void MainWindow::on_treeView_customContextMenuRequested(const QPoint &pos)
{
menu->exec(QCursor::pos());
//path.clear();
}
void MainWindow::on_treeView_2_customContextMenuRequested(const QPoint &pos)
{
menu->exec(QCursor::pos());
//path2.clear();
}
Так вот проблема в следующем. Когда я нажимаю по дереву каталогов файловой системы левой кнопкой мыши(выделяю)его то полный путь папки заносится в strimglist model и отображается в qlistview. В случае повторного нажатия по этому же каталогу он как бы удаляется из списка. Те пользователь выделил папку - значит как бы хочет что нибудь с ней сделать, если снял выделение(повторно нажал) значит не хочет. Но проблема в том когда я нажимаю правой кнопкой мыши то выделение снимается при вызове контекстного меню.... Так вот как сделать так чтоб выделение не снималось конкретно при нажатии пкм(при вызове контекстного меню)?