Я создаю флажки и вызываю 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();
}