当我将我的QT版本从4.8.6升级到4.8.7时,widget列表会失去焦点

When i upgraded my QT version from 4.8.6 to 4.8.7, the widget list will lost the focus

// 例如当我在小部件列表中按下按键时。它不会关注选项。 我查看日志,然后发现当它失去焦点时,焦点在背景小部件列表上。

// - 如果我的应用程序只有一个小部件列表,当我按下按键时它不会失去焦点。 // - 如果我的应用程序有两个小部件列表,第二个在第一个下面。当我第一次按下按键时,它会聚焦第一个选项,但当我第二次按下按键时,它会聚焦第二个小部件列表。

// 这个问题困扰了我一个星期,请问有高手可以帮我解决一下吗?我非常感谢你。谢谢.

Follow is my test code,

main.cpp

#include <QtGui/QApplication>

#include "dialog.h"
#include <QFile>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);


    QFont newFont("Times", 7, QFont::Normal);

    a.setFont(newFont);

    QPalette *palette = new QPalette;
    palette->setBrush(QPalette::Window, Qt::white);
    palette->setBrush(QPalette::WindowText, Qt::black);
    palette->setBrush(QPalette::BrightText, Qt::white);
    palette->setBrush(QPalette::Base, Qt::white);
    palette->setBrush(QPalette::AlternateBase, Qt::white);
    palette->setBrush(QPalette::Highlight, Qt::black);
    palette->setBrush(QPalette::Disabled, QPalette::Highlight, Qt::black);
    a.setPalette(*palette);

    QFile file(":/qss/mainWindow.qss");
    file.open(QFile::ReadOnly);
    a.setStyleSheet(file.readAll());

    Dialog dlg;

    //set part of window property: hide title frame
    dlg.setWindowFlags(Qt::FramelessWindowHint);
    //move window to zero point: location(0,0)
    dlg.move(0, 0);

    dlg.activateWindow();


    dlg.show();


    return a.exec();
}


dialog.cpp

#include <QDebug>

#include "dialog.h"

#include "ui_dialog.h"

#include "QKeyEvent"



Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{

    ui->setupUi(this);

    InitWidget();

    InstallFilters();

}


Dialog::~Dialog()
{

    delete ui;

}

void Dialog::InitWidget()
{

    this->m_pView = NULL;

    for(int index=0; index<10; index++)
    {
        ui->listWidget->insertItem(index, QString("Item %1").arg(index));
    }

    ui->listWidget->hide();
}

bool Dialog::InstallFilters()
{

    ui->lineEdit->installEventFilter(this);

    ui->lineEdit_2->installEventFilter(this);

    ui->listWidget->installEventFilter(this);

    ui->textEdit->installEventFilter(this);

    ui->textEdit->setFocus();

    ui->textEdit->setText("I am background");

    return true;
}

bool Dialog::eventFilter(QObject *o, QEvent *e)
{

    qDebug()<<"The Obj is"<<o->objectName()<<"EventType:"<<e->type();

    if(e->type()!= QEvent::KeyPress)
        return QDialog::eventFilter(o, e);

    QKeyEvent *pKeyEvent = dynamic_cast<QKeyEvent*>(e);

    switch(pKeyEvent->key())
    {
        case Qt::Key_F10:
        case Qt::Key_M:
        {
            ui->listWidget->show();        
            ui->listWidget->setFocus();        
            ui->listWidget->setCurrentRow(0);
            return true;
        }

        case Qt::Key_F3:
        case Qt::Key_C:
        {
            ui->listWidget->hide();        
            ui->textEdit->setFocus();
            return true;
        }
    }
    return QDialog::eventFilter(o, e);

}

qt-embedded 的键盘导航功能在我的 4.8.6 配置中被默认禁用。但是是在4.8.7打开的。所以它显示重叠,我们找不到焦点。因此,箭头键更改了活动小部件而不是活动列表元素。

解决方案, QT_EMBEDDED_KEYPAD_FLAGS = ""