use event filter to bypass default shortcuts that conflict with our custom ones

This commit is contained in:
Axel Kohlmeyer
2023-10-04 06:29:39 -04:00
parent ed631ecd44
commit 35640dd72e
2 changed files with 23 additions and 1 deletions

View File

@ -65,8 +65,9 @@ ChartWindow::ChartWindow(const QString &_filename, QWidget *parent) :
setLayout(layout); setLayout(layout);
connect(normal, &QPushButton::released, this, &ChartWindow::reset_zoom); connect(normal, &QPushButton::released, this, &ChartWindow::reset_zoom);
connect(columns, SIGNAL(currentIndexChanged(int)), this, SLOT(change_chart(int))); connect(columns, SIGNAL(currentIndexChanged(int)), this, SLOT(change_chart(int)));
installEventFilter(this);
QSettings settings; QSettings settings;
resize(settings.value("chartx", 500).toInt(), settings.value("charty", 320).toInt()); resize(settings.value("chartx", 500).toInt(), settings.value("charty", 320).toInt());
} }
@ -234,6 +235,26 @@ void ChartWindow::closeEvent(QCloseEvent *event)
QWidget::closeEvent(event); QWidget::closeEvent(event);
} }
// event filter to handle "Ambiguous shortcut override" issues
bool ChartWindow::eventFilter(QObject *watched, QEvent *event)
{
if (event->type() == QEvent::ShortcutOverride) {
QKeyEvent *keyEvent = dynamic_cast<QKeyEvent *>(event);
if (!keyEvent) return QWidget::eventFilter(watched, event);
if (keyEvent->modifiers().testFlag(Qt::ControlModifier) && keyEvent->key() == '/') {
stop_run();
event->accept();
return true;
}
if (keyEvent->modifiers().testFlag(Qt::ControlModifier) && keyEvent->key() == 'W') {
close();
event->accept();
return true;
}
}
return QWidget::eventFilter(watched, event);
}
/* -------------------------------------------------------------------- */ /* -------------------------------------------------------------------- */
ChartViewer::ChartViewer(const QString &title, int _index, QWidget *parent) : ChartViewer::ChartViewer(const QString &title, int _index, QWidget *parent) :

View File

@ -54,6 +54,7 @@ private slots:
protected: protected:
void closeEvent(QCloseEvent *event) override; void closeEvent(QCloseEvent *event) override;
bool eventFilter(QObject *watched, QEvent *event) override;
private: private:
QMenuBar *menu; QMenuBar *menu;