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的标志是什么?
答案 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
预期:QLineEdit
专注且文字显示
实际:QLineEdit
输入焦点丢失
请查找或报告Qt bug tracker
例如,可以使用QLineEdit
标志来解决方法。
QGraphicsItem::ItemIsFocusScope