Событие QComboBox для Custom QLineEdit - PullRequest
0 голосов
/ 14 ноября 2018

Проблема: у меня есть пользовательское событие на 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 голосов
/ 15 ноября 2018

Я хочу, чтобы когда событие передавалось в QComboBox, оно передавалось в QComboBox-> lineEdit ().

installEventFilter () ваш друг здесь. Он позволяет объекту A устанавливать фильтр событий на другой объект B, так что перед вызовом метода event(QEvent *) объекта B сначала будет вызван метод eventFilter(QObject *, QEvent *) объекта A, чтобы объект A мог решить, как обрабатывать событие (и должно ли событие быть передано объекту B впоследствии).

Вы можете использовать это, чтобы ваш CustomCombo мог видеть и реагировать на события, которые в противном случае были бы направлены непосредственно в `QComboBox.

0 голосов
/ 14 ноября 2018

Использование 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);
}
...