focusInEvent 未在 QLineEdit 子类中调用
focusInEvent not called in QLineEdit subclass
我有一个 Qt/cpp 代码并显示一个子类 QLineEdit
。双击 QLineEdit
时,永远不会调用 focusInEvent
(在 Maya 中启动)。
void myQLineEditClass::focusInEvent(QFocusEvent *e)
{
MGlobal::displayInfo(MQtUtil::toMString(QString().sprintf("HERE")));
QLineEdit::focusInEvent(e);
}
如果 .h 保护部分中存在 focusInEvent
,则永远不会显示 HERE。知道如何获得 focusInEvents 吗?
试试下面的方法。在 focusInEvent 没有的情况下,有几次对我有用。
void YourWidget::changeEvent(QEvent* event)
{
if (event->type() == QEvent::ActivationChange)
{
if (isActiveWindow())
{
// gaining the focus
}
else
{
// loosing the focus
}
}
// or whatever *parent* class call is
QWidget::changeEvent(event);
}
事件被编辑器小部件拦截。参见 QItemDelegate::createEditor
。那里返回的小部件将得到它。
问题与 QLineEdit 位于 QGraphicsView 中的事实有关,而该 QGraphicsView 位于另一个 QGraphicsView 中。将 QLineEdit 带到更高级别的 QGraphicsView 使其工作。
我有一个 Qt/cpp 代码并显示一个子类 QLineEdit
。双击 QLineEdit
时,永远不会调用 focusInEvent
(在 Maya 中启动)。
void myQLineEditClass::focusInEvent(QFocusEvent *e)
{
MGlobal::displayInfo(MQtUtil::toMString(QString().sprintf("HERE")));
QLineEdit::focusInEvent(e);
}
如果 .h 保护部分中存在 focusInEvent
,则永远不会显示 HERE。知道如何获得 focusInEvents 吗?
试试下面的方法。在 focusInEvent 没有的情况下,有几次对我有用。
void YourWidget::changeEvent(QEvent* event)
{
if (event->type() == QEvent::ActivationChange)
{
if (isActiveWindow())
{
// gaining the focus
}
else
{
// loosing the focus
}
}
// or whatever *parent* class call is
QWidget::changeEvent(event);
}
事件被编辑器小部件拦截。参见 QItemDelegate::createEditor
。那里返回的小部件将得到它。
问题与 QLineEdit 位于 QGraphicsView 中的事实有关,而该 QGraphicsView 位于另一个 QGraphicsView 中。将 QLineEdit 带到更高级别的 QGraphicsView 使其工作。