Qt Как показать фокус прямоугольник на сфокусированном QCheckBox из кода? - PullRequest
0 голосов
/ 29 мая 2019

Я создаю флажки и вызываю setFocus () для одного.Проблема в том, что когда приложение запускается - ни на одном из них нет прямоугольника фокуса.

Попробовал это на Qt 5.6 и 5.12.Я использую стиль "фьюжн".Флажок находится в фокусе, если вы нажимаете пробел - он переключается, но без фокуса прямоугольника.Если я нажму tab / shift-tab или нажму на него, прямоугольник фокуса станет видимым.Кажется, что для того, чтобы показать прямоугольник foucs - он также должен иметь фокус клавиатуры.Есть ли способ установить фокус клавиатуры из кода без публикации событий для имитации событий клавиатуры или мыши?

Краткий пример приложения:

#include <QApplication>
#include <QStyleFactory>
#include <QMainWindow>
#include <QVBoxLayout>
#include <QCheckBox>
#include <QKeyEvent>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    a.setStyle(QStyleFactory::create("fusion"));

    QWidget* w=new QWidget();
    QVBoxLayout* l=new QVBoxLayout(w);
    QCheckBox* c=nullptr;
    l->addWidget(new QCheckBox("one"));
    l->addWidget(new QCheckBox("two"));
    l->addWidget(c=new QCheckBox("three (in focus)"));
    l->addWidget(new QCheckBox("four"));
    l->addStretch();

    QMainWindow m;
    m.setCentralWidget(w);
    m.show();

    c->setFocus();  // this sets focus on checkbox, but doesn't show keyboard focus rect

    if(0){
        // dirty solution
        a.postEvent(w,new QKeyEvent(QEvent::KeyPress,Qt::Key_Tab,Qt::NoModifier));
        a.postEvent(w,new QKeyEvent(QEvent::KeyRelease,Qt::Key_Tab,Qt::NoModifier));
        a.postEvent(w,new QKeyEvent(QEvent::KeyPress,Qt::Key_Tab,Qt::ShiftModifier));
        a.postEvent(w,new QKeyEvent(QEvent::KeyRelease,Qt::Key_Tab,Qt::ShiftModifier));
    }

    return a.exec();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...