问题:我在自定义QLineEdit
内的QComboBox
上有一个自定义事件,并且在需要时仅将特定事件从QComboBox
传递到QLineEdit
。我无法通过制表符。
我想将事件传递给QComboBox
时将其传递给QComboBox->lineEdit()
。
QCustomCombo::QCustomCombo():
m_lineEdit(new QCustomLineEdit)
{
setEditable(true);
setLineEdit(m_lineEdit);
}
bool QCustomCombo::event(QEvent * event)
{
if(event->type() == QEvent::KeyPress)
{
QKeyEvent * keyEvent = static_cast<QKeyEvent *>(event);
if(keyEvent->key() == Qt::Key_tab)
{
//pass to lineEdit();
//I have tried 'return true/false and QWidget::event(event)'
//I have also tried commenting out QCustomCombo::event, same problem
}
}
return QWidget::event(event);
}
QCustomLineEdit
bool QCustomLineEdit::event(QEvent * event)
{
if(event->type() == QEvent::KeyPress)
{
QKeyEvent * keyEvent = static_cast<QKeyEvent *>(event);
if(keyEvent->key() == Qt::Key_tab)
{
//Do custom Stuff
return true;
}
if(keyEvent->key() == Qt::Key_Right)
{
//Do custom Stuff
return true;
}
}
return QWidget::event(event);
}
QLineEdit
的左右箭头和制表符有一个自定义事件。只有箭头通过了。但我无法将标签传递给它。
答案 0 :(得分:1)
使用QApplication::notify
bool QCustomCombo::event(QEvent * event)
{
if(event->type() == QEvent::KeyPress)
{
QKeyEvent * keyEvent = static_cast<QKeyEvent *>(event);
if(keyEvent->key() == Qt::Key_Tab)
{
qApp->notify(m_lineEdit, event);
return true;
}
}
return QWidget::event(event);
}
答案 1 :(得分:1)
我想要将事件传递给QComboBox时将其传递给 QComboBox-> lineEdit()。
installEventFilter()是您的朋友在这里。它允许对象A在另一个对象B上安装事件过滤器,以便在调用对象B的event(QEvent *)
方法之前,首先调用对象A的eventFilter(QObject *, QEvent *)
方法,以便对象A可以决定如何处理事件(以及之后是否应该将事件传递给对象B)。
您可以使用它来使您的CustomCombo
看到事件并对其做出反应,否则这些事件将直接进入`QComboBox。