代码之家  ›  专栏  ›  技术社区  ›  xmm-wang

当我将QT版本从4.8.6升级到4.8.7时,小部件列表将失去焦点

  •  0
  • xmm-wang  · 技术社区  · 8 年前

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

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

    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);
    
    }
    
    1 回复  |  直到 8 年前
        1
  •  0
  •   xmm-wang    7 年前

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

    解决方案

    推荐文章