如此这样就能使用上下左右键移动焦点,使用确认键来操作了。
想没想起来,以前的老式非智能机的时代,导航按键不就是 上下左右+确认吗???
上图吧。
上代码吧.
#include "zpage1.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
a.setStyleSheet("\
QToolButton:focus{background-color:yellow;}\
QCheckBox:focus{background-color:yellow;}\
QRadioButton:focus{background-color:yellow;}");
ZPage1 w;
w.show();
return a.exec();
}
#ifndef ZPAGE1_H
#define ZPAGE1_H
#include <QWidget>
#include <QKeyEvent>
#include <QDebug>
#include <QGridLayout>
#include <QToolButton>
#include <zdialog1.h>
#include <zpage2.h>
class ZPage1 : public QWidget
{
Q_OBJECT
public:
ZPage1(QWidget *parent = 0);
~ZPage1();
protected:
bool eventFilter(QObject *obj, QEvent *event);
private slots:
void ZSlotBtnClicked();
private:
QGridLayout *m_gridLayout;
QToolButton *m_btnArray[20];
ZPage2 *m_page2;
};
#endif // ZPAGE1_H
#include "zpage1.h"
ZPage1::ZPage1(QWidget *parent)
: QWidget(parent)
{
this->setStyleSheet("QToolButton{width:50px;height:30px;}");
this->m_gridLayout=new QGridLayout;
qint32 tX=0;
qint32 tY=0;
for(qint32 i=0;i<20;i++)
{
this->m_btnArray[i]=new QToolButton;
this->m_btnArray[i]->installEventFilter(this);
this->m_btnArray[i]->setText(QString("%1").arg(i+1));
this->m_gridLayout->addWidget(this->m_btnArray[i],tX,tY);
if(tX++>=5)
{
tY++;
tX=0;
}
connect(this->m_btnArray[i],SIGNAL(clicked()),this,SLOT(ZSlotBtnClicked()));
}
this->setLayout(this->m_gridLayout);
this->m_page2=new ZPage2;
}
ZPage1::~ZPage1()
{
for(qint32 i=0;i<20;i++)
{
delete this->m_btnArray[i];
}
delete this->m_gridLayout;
delete this->m_page2;
}
void ZPage1::ZSlotBtnClicked()
{
QToolButton *btn=qobject_cast<QToolButton*>(sender());
if(btn)
{
qDebug()<<"Button Clicked:"<<btn->text();
if(btn==this->m_btnArray[2])
{
this->m_page2->setGeometry(100,100,400,300);
this->m_page2->show();
}
if(btn==this->m_btnArray[3])
{
ZDialog1 tdia;
tdia.exec();
}
}
}
bool ZPage1::eventFilter(QObject *obj, QEvent *event)
{
if(event->type()==QEvent::KeyPress)
{
qint32 tCurFocusX;
qint32 tCurFocusY;
for(qint32 i=0;i<this->m_gridLayout->rowCount();i++)
{
bool bFindIt=false;
for(qint32 j=0;j<this->m_gridLayout->columnCount();j++)
{
QLayoutItem *tItem=this->m_gridLayout->itemAtPosition(i,j);
if(!tItem)
{
continue;
}
QWidget *tFocusWidget=tItem->widget();
if(tFocusWidget && tFocusWidget==this->focusWidget())
{
qDebug()<<"oldPos:"<<i<<j;
tCurFocusX=i;
tCurFocusY=j;
bFindIt=true;
break;
}
}
if(bFindIt)
{
break;