【发布时间】:2017-01-01 13:46:02
【问题描述】:
我想处理所有子小部件的按键事件,为此我正在尝试如下操作:
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 时,只会发出 somesignal()。我还想为button1 和button2 发出somesignal1()、somesignal2()。
谁能帮我实现这个目标?
【问题讨论】:
-
你复制了
gBox->installEventFilter(this);3 次。 -
您已经声明了两次
button1,两次将其添加到布局中,并在gbox上安装了三次事件过滤器。请提供实际代码。 -
按下某些键时按钮是否有焦点?
-
gbox、button1 和 button2 是 Widget 的成员吗?如果是这样,您在构造函数中再次声明它们。
-
你想在这里完成什么?关于这样做的目的的一些细节会很好。到目前为止似乎是XY problem。
标签: c++ qt widget keyboard-events qevent