事件 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。
问题:我在自定义 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。