1
는 내가 아래와 같이 뭔가를 시도하고있는 모든 자식 위젯에 대한 키 누르기 이벤트를 처리 할 :Qt의 모든 하위 위젯에 대한 키 누르기 이벤트를 처리하는 방법은 무엇입니까?
Widget::Widget(QWidget *parent):QWidget(parent)
{
QGroupBox *gBox = new QGroupBox(this);
QPushButton *button1 = new QPushButton("1");
QPushButton *button2 = new QPushButton("2");
QVBoxLayout *vBox = new QVBoxLayout;
vBox->addWidget(button1);
vBox->addWidget(button2);
gBox->setLayout(vBox);
gBox->installEventFilter(this);
button1->installEventFilter(this);
button2->installEventFilter(this);
}
bool Widget::eventFilter(QObject *obj, QEvent *event)
{
if (event->type() == QEvent::KeyPress)
{
if(obj == gBox)
{
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
if(keyEvent->key() == Qt::Key_F1)
{
emit somesignal();
}
}
if(obj == button1)
{
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
if(keyEvent->key() == Qt::Key_F1)
{
emit somesignal1();
}
}
if(obj == button2)
{
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
if(keyEvent->key() == Qt::Key_F1)
{
emit somesignal2();
}
}
}
return QObject::eventFilter(obj, event);
}
을하지만 F1을 눌러 whwnever 만 somesignal()
이 방출된다. button1
및 button2
에 대해서도 somesignal1()
, somesignal2()
을 내고 싶습니다.
누가이 문제를 해결할 수 있습니까?
'gBox-> installEventFilter (this);를 3 번 복제했습니다. – ilotXXI
'button1'을 두 번 선언하고 레이아웃에 두 번 추가하고'gbox'에 이벤트 필터를 세 번 설치했습니다. 실제 코드를 입력하십시오. –
일부 키를 누를 때 버튼에 포커스가 있습니까? – thuga