我正在创建复选框,并在其中调用setFocus()。问题在于,当应用程序启动时-没有任何焦点。
在Qt 5.6和5.12上进行了尝试。我正在使用“融合”风格。如果您按空格键,则复选框处于焦点状态-已选中,但没有焦点。如果我按Tab / Shift-Tab或单击它,则可以看到rect。看来它可以显示焦点-它也应该具有键盘焦点。有没有一种方法可以从代码中设置键盘焦点,而无需发布用于模拟键盘或鼠标事件的事件?
一个简短的示例应用程序:
#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();
}