fix text edit losing focus

This commit is contained in:
shun-iwasawa 2023-06-05 12:56:17 +09:00 committed by manongjohn
parent d0090967f3
commit 6ea48d78c9
3 changed files with 6 additions and 26 deletions

View file

@ -637,7 +637,6 @@ public:
protected: protected:
void keyPressEvent(QKeyEvent *event) override; void keyPressEvent(QKeyEvent *event) override;
void focusOutEvent(QFocusEvent *e) override; void focusOutEvent(QFocusEvent *e) override;
bool eventFilter(QObject *, QEvent *) override;
signals: signals:
void edited(); void edited();

View file

@ -38,6 +38,7 @@
#include <QDesktopWidget> #include <QDesktopWidget>
#include <QDialog> #include <QDialog>
#include <QLineEdit> #include <QLineEdit>
#include <QTextEdit>
#include <QWidgetAction> #include <QWidgetAction>
#include <QLabel> #include <QLabel>
#include <QCheckBox> #include <QCheckBox>
@ -145,7 +146,8 @@ void TPanel::enterEvent(QEvent *event) {
// grab the focus, unless a line-edit is focused currently // grab the focus, unless a line-edit is focused currently
QWidget *focusWidget = qApp->focusWidget(); QWidget *focusWidget = qApp->focusWidget();
if (focusWidget && dynamic_cast<QLineEdit *>(focusWidget)) { if (focusWidget && (dynamic_cast<QLineEdit *>(focusWidget) ||
dynamic_cast<QTextEdit *>(focusWidget))) {
event->accept(); event->accept();
return; return;
} }

View file

@ -1566,9 +1566,7 @@ void IntParamField::update(int frame) {
namespace component { namespace component {
MyTextEdit::MyTextEdit(const QString &text, QWidget *parent) MyTextEdit::MyTextEdit(const QString &text, QWidget *parent)
: QTextEdit(text, parent) { : QTextEdit(text, parent) {}
installEventFilter(this);
}
void MyTextEdit::keyPressEvent(QKeyEvent *event) { void MyTextEdit::keyPressEvent(QKeyEvent *event) {
QTextEdit::keyPressEvent(event); QTextEdit::keyPressEvent(event);
@ -1580,25 +1578,6 @@ void MyTextEdit::focusOutEvent(QFocusEvent *event) {
emit edited(); emit edited();
} }
bool MyTextEdit::eventFilter(QObject *obj, QEvent *e) {
if (e->type() != QEvent::ShortcutOverride)
return QTextEdit::eventFilter(obj, e);
QKeyEvent *ke = (QKeyEvent *)e;
std::string keyStr =
QKeySequence(ke->key() + ke->modifiers()).toString().toStdString();
QAction *action = CommandManager::instance()->getActionFromShortcut(keyStr);
if (!action) return QTextEdit::eventFilter(obj, e);
std::string actionId = CommandManager::instance()->getIdFromAction(action);
if (actionId == "MI_Undo" || actionId == "MI_Redo" ||
actionId == "MI_Clear" || actionId == "MI_Copy" ||
actionId == "MI_Paste" || actionId == "MI_Cut")
return QTextEdit::eventFilter(obj, e);
return true;
}
}; // namespace component }; // namespace component
StringParamField::StringParamField(QWidget *parent, QString name, StringParamField::StringParamField(QWidget *parent, QString name,