Finally fix selection.
This commit is contained in:
parent
f154a135d8
commit
333214f7ca
@ -416,19 +416,23 @@ PartitionBarsView::isIndexHidden( const QModelIndex& index ) const
|
|||||||
void
|
void
|
||||||
PartitionBarsView::setSelection( const QRect& rect, QItemSelectionModel::SelectionFlags flags )
|
PartitionBarsView::setSelection( const QRect& rect, QItemSelectionModel::SelectionFlags flags )
|
||||||
{
|
{
|
||||||
|
//HACK: this is an utterly awful workaround, which is unfortunately necessary.
|
||||||
|
// QAbstractItemView::mousePressedEvent calls setSelection, but before that,
|
||||||
|
// for some mental reason, it works under the assumption that every item is a
|
||||||
|
// rectangle. This rectangle is provided by visualRect, and the idea mostly
|
||||||
|
// works, except when the item is an extended partition item, which is of course
|
||||||
|
// a rectangle with a rectangular hole in the middle.
|
||||||
|
// QAbstractItemView::mousePressEvent builds a QRect with x1, y1 in the center
|
||||||
|
// of said visualRect, and x2, y2 in the real QMouseEvent position.
|
||||||
|
// This may very well yield a QRect with negative size, which is meaningless.
|
||||||
|
// Therefore the QRect we get here is totally bogus, and its topLeft is outside
|
||||||
|
// the actual area of the item we need.
|
||||||
|
// What we need are the real coordinates of the QMouseEvent, and the only way to
|
||||||
|
// get them is by fetching the private x2, y2 from the rect.
|
||||||
|
// TL;DR: this sucks, look away. -- Teo 12/2015
|
||||||
int x1, y1, x2, y2;
|
int x1, y1, x2, y2;
|
||||||
rect.getCoords( &x1, &y1, &x2, &y2 );
|
rect.getCoords( &x1, &y1, &x2, &y2 );
|
||||||
cDebug() << "Actual click point is" << x2 << y2;
|
selectionModel()->select( indexAt( QPoint( x2, y2 ) ), flags );
|
||||||
selectionModel()->setCurrentIndex( indexAt( QPoint( x2, y2 ) ), flags );
|
|
||||||
cDebug() << "selected items count:" << selectedIndexes().count();
|
|
||||||
QStringList itemstrings;
|
|
||||||
foreach( const QModelIndex& ind, selectedIndexes() )
|
|
||||||
{
|
|
||||||
if ( ind.column() == 0 )
|
|
||||||
itemstrings.append( ind.data().toString() );
|
|
||||||
}
|
|
||||||
|
|
||||||
cDebug() << "selected items:\n" << itemstrings.join( "\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user