1
私は以下のような何かしようとしていたため、私は、すべての子ウィジェットのためのキープレスイベントを処理したい:Qtですべての子ウィジェットのkeypressイベントを処理する方法は?
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'を2回宣言してレイアウトに2回追加し、' gbox'にイベントフィルタを3回インストールしました。実際のコードを入力してください。 –
いくつかのキーを押すと、ボタンにもフォーカスがありますか? – thuga