天天看點

Qt 焦點問題

        在寫QT程式時,遇到焦點問題。在某個界面menu中,所有控件的焦點都已設定為NoFocus,按某個按鍵會彈出一個dialog,關閉dialog後,上下左右按鍵都不響應,無法進入keyPressEvent,查詢發現,這幾個按鍵可以切換焦點,當切換焦點時,則不會寫響應keyPress事件,而本界面的控件都已設定為NoFocus,故編寫了以下類,檢測KeyPress事件,并列印擷取焦點的控件。

MyApp::MyApp(int &argc, char **argv, Type index) :

    QApplication(argc, argv, index)

{

}

MyApp::MyApp(int &argc, char **argv) :

    QApplication(argc, argv)

{

}

bool MyApp::notify(QObject *reciver, QEvent *e)

{

    if(e->type() == QEvent::KeyPress)

    {

//        qDebug()<<"key = "<<((QKeyEvent *)e)->key();

        QWidget *m_widget = QApplication::focusWidget();

        qDebug()<<m_widget->metaObject()->className();

    }

    return QApplication::notify(reciver, e);

}

在main函數中:

原始:    QApplication a(argc, argv);

替換為:    MyApp a(argc, argv);

        編譯執行程式,通過調試發現,當出現上述問題時,列印的焦點所在控件為QPushButton,menu界面雖然有QPushButton,但都設定成了Nofocus,檢查發現,在該界面有一個QDialogButtonBox,QDialogButtongBox類是一個包含很多按鈕的控件,在對話框中有多個按鈕需要分組排列的按鈕時,可以使用QDialogButtongBox類。故這個控件即為問題所在,雖然該控件本身設定為NoFocus,但是由于其包含很多QPushButton控件,導緻焦點聚焦在某個QPushButton而不響應keyPress事件。

        折騰了兩天,發現是由于自己的馬虎,添加了一個根本沒用的控件,導緻了這個問題,想想很是懊惱,還要深刻檢討自己才是。

繼續閱讀