在寫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事件。
折騰了兩天,發現是由于自己的馬虎,添加了一個根本沒用的控件,導緻了這個問題,想想很是懊惱,還要深刻檢討自己才是。