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事件。

        折腾了两天,发现是由于自己的马虎,添加了一个根本没用的控件,导致了这个问题,想想很是懊恼,还要深刻反省自己才是。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值