и так выкладываю код:
mytreeview.h#ifndef MYTREEVIEW_H
#define MYTREEVIEW_H
#include <QTreeView>
#include <QMessageBox>
#include <QMouseEvent>
class mytreeview : public QTreeView
{
public:
mytreeview(QWidget *parent);
protected:
void mousePressEvent( QMouseEvent * event );
public:
QMessageBox msg;
};
#endif // MYTREEVIEW_H
mytreeview.cpp#include "mytreeview.h"
mytreeview::mytreeview(QWidget *parent)
:QTreeView(parent)
{
}
void mytreeview::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::RightButton) {
// здесь обрабатываем левую кнопку мыши
msg.setText("pravay");
msg.exec();
}
else
{
// передаём остальные кнопки в базовый класс
QTreeView::mousePressEvent(event);
}
}
mainwindow.h#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include "mytreeview.h"
#include <QMainWindow>
#include <QFileSystemModel>
#include <QMessageBox>
#include <QString>
#include <QStringListModel>
#include <QMouseEvent>
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;
QString str;
mytreeview tt;
};
#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);
mytreeview *hh=new mytreeview;
hh->show();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_treeView_clicked(const QModelIndex &index)
{
bool q=model1->isDir(index); // В случае если объект папка
if (q)
{
//int i;
str=model1->fileInfo(index).absoluteFilePath(); // взятие абсолютного пути
if (!path.contains(str)) // в случае если путь не содержитьсся в списке
{
path<<str; // то добавляем его
}
else
{
for (int i=0;i<path.size();i++)
{
if (path[i]==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[i]==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<<str;
//path.clear();
}
void MainWindow::on_treeView_2_customContextMenuRequested(const QPoint &pos)
{
menu->exec(QCursor::pos());
//path2.clear();
}