Qt如何通过代码显示对重点QCheckBox的关注?

时间:2019-05-29 14:27:45

标签: c++ qt

我正在创建复选框,并在其中调用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();
}

0 个答案:

没有答案