事件 QComboBox 到自定义 QLineEdit

Event QComboBox to Custom QLineEdit

问题:我在自定义 QComboBox 内的 QLineEdit 上有一个自定义事件,只有特定事件在我需要时从 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 具有左右箭头和制表符的自定义事件。只有箭头通过。但我无法将标签传递给它。

使用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);
}

I want when an event passed to QComboBox it will be passed to the QComboBox->lineEdit().

installEventFilter() 是你的朋友。它允许对象A给另一个对象B安装一个事件过滤器,这样在对象B的event(QEvent *)方法被调用之前,对象A的eventFilter(QObject *, QEvent *)方法会先被调用,这样对象A可以决定如何处理事件(以及事件是否应该在之后传递给对象 B)。

您可以使用它,以便您的 CustomCombo 可以查看事件并对其做出反应,否则这些事件将直接进入 `QComboBox。