事件QComboBox到自定义QLineEdit

时间:2018-11-14 16:47:08

标签: c++ qt qt5 qcombobox qlineedit

问题:我在自定义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的左右箭头和制表符有一个自定义事件。只有箭头通过了。但我无法将标签传递给它。

2 个答案:

答案 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。