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);
}
但whwnever我按F1,只有somesignal()
被髮射。我也想發出somesignal1()
,somesignal2()
,對於button1
和button2
。
有人可以幫助我實現這個目標嗎?
您重複了'gBox-> installEventFilter(this);'3次。 – ilotXXI
您聲明瞭'button1'兩次,將它添加到佈局兩次,並在'gbox'上安裝了三次事件過濾器。請提供實際的代碼。 –
當您按下某些按鍵時,按鈕是否有焦點? – thuga