QGraphicsScene,QTextEdit和失去焦点

时间:2017-09-06 18:20:52

标签: c++ qt5

QTextEdit和QGraphicsScene中嵌入的类似小部件在使用标准上下文菜单(复制/粘贴)后失去焦点,i。即你需要再次点击QTextEdit继续编辑。场景使用newFocusItem == 0发出focusItemChanged。

第一个问题:这是一个错误还是标准行为?

我的调查显示函数QGraphicsItemPrivate :: setVisibleHelper()清除了焦点:

    reference operator[](const size_type _Off)
    {   // subscript mutable sequence
    auto& _My_data = this->_Get_data();
    _IDL_VERIFY(_Off <= _My_data._Mysize, "string subscript out of range");
    return (_My_data._Myptr()[_Off]);
    }

QGraphisItem有未记录的(内部)标志QGraphicsItem :: ItemIsFocusScope。如果为QTextEdit的代理项设置了标志,它会在菜单后获得焦点,但无论如何焦点在第一次清除之后以及该项之后再次收到它。

第二个问题:QGraphicsItem :: ItemIsFocusScope的标志是什么?

1 个答案:

答案 0 :(得分:1)

看起来nullptr_t适用于FocusScope QML项目。 QtQuick1基于QGraphicsScene并使用该标志。

我不确定副作用,但这有助于:

QGraphicsItem::ItemIsFocusScope

在Qt 5.9,Linux上测试

修改

对我来说看起来像是错误:

  • auto edit = new QLineEdit(); auto item = scene->addWidget(edit); item->setFlag(QGraphicsItem::GraphicsItemFlag::ItemIsPanel); 添加到场景
  • 点击以关注QLineEdit
  • 点击ContextMenu键以显示上下文菜单
  • 按Esc键退出上下文菜单
  • 尝试输入

预期:QLineEdit专注且文字显示

实际:QLineEdit输入焦点丢失

请查找或报告Qt bug tracker

例如,可以使用QLineEdit标志来解决方法。

QGraphicsItem::ItemIsFocusScope