-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmitabla.cpp
More file actions
122 lines (108 loc) · 3.56 KB
/
mitabla.cpp
File metadata and controls
122 lines (108 loc) · 3.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#include "./mitabla.h"
#include "./mimodelo.h"
#include "./myeventfilter.h"
#include "./midelegado.h"
#include <QMouseEvent>
#include <QPen>
#include <QPainter>
#include <QDebug>
MiTabla::MiTabla(QWidget *parent):QTableView(parent)
{
m_tamMarca = 5;
setModel((new MiModelo(this)));
setMouseTracking(true);
setItemDelegate(new MiDelegado(this));
viewport()->installEventFilter(new MyEventFilter(this));
QObject::connect(this,SIGNAL(pressed(QModelIndex)),this,SLOT(CambiarIndiceACtual(QModelIndex)));
QObject::connect(selectionModel(),SIGNAL(selectionChanged(QItemSelection,QItemSelection)),this,SLOT(FiltrarColumnaSeleccion()));
}
QModelIndex &MiTabla::indiceActual()
{
return m_indiceActual;
}
void MiTabla::SetModoSeleccionNormal()
{
modoSeleccion = SELECCION_NORMAL;
}
void MiTabla::SetModoSeleccionRestringido()
{
modoSeleccion = SELECCION_RESTRINGIDA;
}
void MiTabla::paintEvent(QPaintEvent *event)
{
QTableView::paintEvent(event);
if(selectionModel() && selectionModel()->selectedIndexes().isEmpty())
{
return;
}
QPen pen(Qt::black,3);
QPainter painter(viewport());
//defino el area seleccionada
QRect rect = visualRect(selectedIndexes().first()) | visualRect(selectedIndexes().last());
//dibujo la marca en la esquina inferior derecha del area seleccionada
painter.setBrush(QBrush(QColor(Qt::black)));
painter.drawRect(rect.x()+rect.width()-m_tamMarca,rect.y()+rect.height()-m_tamMarca,m_tamMarca,m_tamMarca);
//si hago la seleccion en modo restringido, saldra un borde
if (modoSeleccion == SELECCION_RESTRINGIDA) {
painter.setPen(pen);
//painter.drawRect(rect);
painter.drawLine(rect.x(),rect.y(),rect.x()+rect.width(),rect.y());
painter.drawLine(rect.x(),rect.y(),rect.x(),rect.y()+rect.height());
pen.setWidth(1);
painter.setPen(pen);
painter.drawLine(rect.x()+rect.width(),rect.y(),rect.x()+rect.width(),rect.y()+rect.height());
painter.drawLine(rect.x(),rect.y()+rect.height(),rect.x()+rect.width(),rect.y()+rect.height());
}
viewport()->update();
}
bool MiTabla::BotonIzquierdoPresionado()
{
return m_BotonIzqPresionado;
}
int MiTabla::LeeTamMarca()
{
return m_tamMarca;
}
void MiTabla::mousePressEvent(QMouseEvent *event)
{
if(event->buttons() == Qt::LeftButton)
{
m_indiceActual = currentIndex();
setCurrentIndex(this->indexAt(event->pos()));
m_BotonIzqPresionado = true;
}
QTableView::mousePressEvent(event);
}
void MiTabla::mouseReleaseEvent(QMouseEvent *event)
{
//en la funcion release parece no leer el tipo de boton (izquierdo o derecho)
if (modoSeleccion == SELECCION_RESTRINGIDA)
//si estoy en modo restringido efectuo una accion al soltar el boton del raton
//en este caso igualo todos los valores de la columna al primero de ellos
{
foreach (QModelIndex const &i, selectedIndexes() )
{
this->model()->setData(i,selectedIndexes().first().data());
}
}
SetModoSeleccionNormal();
m_BotonIzqPresionado = false;
QTableView::mouseReleaseEvent(event);
}
void MiTabla::CambiarIndiceACtual(const QModelIndex &indice)
{
m_indiceActual=indice;
}
void MiTabla::FiltrarColumnaSeleccion()
{
if (modoSeleccion == SELECCION_RESTRINGIDA)
{
for(const QModelIndex& item : selectionModel()->selectedIndexes())
{
if( item.column() != m_indiceActual.column())
{
selectionModel()->select(item,QItemSelectionModel::Deselect);
}
}
}
}