Spreadsheet: column/row select on right click

This commit is contained in:
Zheng, Lei
2019-09-29 17:58:41 +08:00
committed by wmayer
parent 976952db63
commit 006f685db1
2 changed files with 29 additions and 3 deletions

View File

@@ -53,6 +53,25 @@ void SheetViewHeader::mouseReleaseEvent(QMouseEvent *event)
resizeFinished();
}
bool SheetViewHeader::viewportEvent(QEvent *e) {
if(e->type() == QEvent::ContextMenu) {
auto *ce = static_cast<QContextMenuEvent*>(e);
int section = logicalIndexAt(ce->pos());
if(section>=0) {
if(orientation() == Qt::Horizontal) {
if(!owner->selectionModel()->isColumnSelected(section,owner->rootIndex())) {
owner->clearSelection();
owner->selectColumn(section);
}
}else if(!owner->selectionModel()->isRowSelected(section,owner->rootIndex())) {
owner->clearSelection();
owner->selectRow(section);
}
}
}
return QHeaderView::viewportEvent(e);
}
SheetTableView::SheetTableView(QWidget *parent)
: QTableView(parent)
, sheet(0)
@@ -62,8 +81,10 @@ SheetTableView::SheetTableView(QWidget *parent)
QAction * insertColumns = new QAction(tr("Insert columns"), this);
QAction * removeColumns = new QAction(tr("Remove columns"), this);
setHorizontalHeader(new SheetViewHeader(Qt::Horizontal));
setVerticalHeader(new SheetViewHeader(Qt::Vertical));
setHorizontalHeader(new SheetViewHeader(this,Qt::Horizontal));
setVerticalHeader(new SheetViewHeader(this,Qt::Vertical));
setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);
horizontalHeader()->addAction(insertColumns);
horizontalHeader()->addAction(removeColumns);

View File

@@ -34,7 +34,9 @@ namespace SpreadsheetGui {
class SheetViewHeader : public QHeaderView {
Q_OBJECT
public:
SheetViewHeader(Qt::Orientation o) : QHeaderView(o) {
SheetViewHeader(QTableView *owner, Qt::Orientation o)
: QHeaderView(o),owner(owner)
{
#if QT_VERSION >= 0x050000
setSectionsClickable(true);
#else
@@ -45,6 +47,9 @@ Q_SIGNALS:
void resizeFinished();
protected:
void mouseReleaseEvent(QMouseEvent * event);
bool viewportEvent(QEvent *e);
private:
QTableView *owner;
};
class SheetTableView : public QTableView