问题: 想要键盘方向键控制 按钮组里面的按钮选择状态跳转发现焦点事件进入后就无法触发了。查了一下因为设置排他和选择状态时,只能选中唯一一个按钮,所有焦点事件跳转不到其他按钮上。
解决方法: 直接写一个类似按钮组的控件来模仿里面的排他功能,并且可以方向键控制焦点状态在按钮里面跳转
、、头文件
#include <QObject>
#include <QButtonGroup>
#include <QFocusEvent>
#include <QAbstractButton>
#include <QKeyEvent>
#include <QEvent>
class CButtonGroup : public QObject
{
Q_OBJECT
public:
explicit CButtonGroup(QObject *parent = nullptr);
void addButton(QAbstractButton *button, int id = -1);
void setDefaultCheck(QAbstractButton *button);
private slots:
void changeCurrentCheck();
private:
QAbstractButton *m_curCheckBtn{nullptr};
};
cpp
#include "CButtonGroup.h"
CButtonGroup::CButtonGroup(QObject *parent)
: QObject(parent)
{
}
void CButtonGroup::addButton(QAbstractButton *button, int id)
{
if (NULL == button)
{
return;
}
connect(button, &QAbstractButton::clicked, this, &CButtonGroup::changeCurrentCheck);
}
void CButtonGroup::setDefaultCheck(QAbstractButton *button)
{
button->setFocus();
button->setChecked(true);
m_curCheckBtn = button;
}
void CButtonGroup::changeCurrentCheck()
{
QAbstractButton *button = qobject_cast<QAbstractButton*>(sender());
if ( m_curCheckBtn == button || NULL == button)
{
return;
}
if (NULL != m_curCheckBtn)
{
m_curCheckBtn->setChecked(false);
}
button->setChecked(true);
m_curCheckBtn = button;
}