簡體   English   中英

Qt 如何阻止 shift-tab 更改小部件焦點?

[英]Qt How to stop shift-tab from changing widget focus?

我正在嘗試設置一個文本編輯,它執行 shift+tab 刪除代碼編輯器所做的縮進; 但我無法響應 shift+tab,因為它會更改小部件焦點。

我嘗試在主 window 中覆蓋事件 function ,但這沒有用; 然后我在所有小部件上嘗試了事件過濾器,但沒有奏效; 然后我嘗試像這樣覆蓋 QApplication::notify :

class MyApplication : public QApplication
{
    Q_OBJECT
public:
    MyApplication(int argc, char *argv[]) : QApplication(argc, argv) { }
    virtual ~MyApplication() = default;

    bool    notify(QObject * o, QEvent *e) override
    {
        if (e->type() == QEvent::KeyPress)
        {
            QKeyEvent* k = static_cast<QKeyEvent*>(e);

            if (k->key() == Qt::Key_Tab && dynamic_cast<QPlainTextEdit*>(focusWidget()))
            {
                // filter tab out
                return false;
            }
        }

        return QApplication::notify(o, e);
    }
};

那沒有用; 此外,它在 QCoreApplication::arguments 中崩潰,除非我出於某種原因從 valgrind 內部運行應用程序。

不管我沒有想法,我怎樣才能阻止 shift+tab 改變焦點?

如果您使用的是QTextEditQPlainTextEdit ,這很可能,您可以使用tabChangesFocus屬性設置 Tab 行為。 See https://doc.qt.io/qt-6/qtextedit.html#tabChangesFocus-prop andhttps://doc.qt.io/qt-6/qplaintextedit.html#tabChangesFocus-prop

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM