这个问题让我疯了,所以我很感激一些帮助。显然做了通常的谷歌搜索和检查qt文档,但没有找到任何解决方案。
我们需要自定义标准QLineEdit
。这是一个原型:
class MyLineEdit : public QLineEdit
{
Q_OBJECT
public:
MyLineEdit(QWidget* a_parent)
{
QTextEdit* textEdit = new QTextEdit(this);
textEdit->setMinimumWidth(width() / 2);
textEdit->setMaximumWidth(width() / 2);
textEdit->setMinimumHeight(30);
textEdit->setTabChangesFocus(true);
// background color red
QPalette p = textEdit->palette();
p.setColor(QPalette::Base, QColor(244,20,20));
textEdit->setPalette(p);
textEdit->setVisible(true);
setFocusProxy(textEdit);
}
};
这会显示QLineEdit
,其上面有QTextEdit
。
使用键盘更改焦点可以按预期工作(TextEdit
获得焦点,而不是LineEdit
)。
使用鼠标更改焦点按预期工作(选择LineEdit
将焦点转移到TextEdit
)。
将MyLineEdit
和常规QLineEdit
个实例添加到QDataWidgetMapper
。我们显然在setModel
实例上使用QDataWidgetMapper
方法调用。
在QDialog
中,使用键盘或鼠标从QLineEdit
更改焦点会触发我们QAbstractItemModel::setData
的实施调用。
在同一个QDialog
中,使用键盘或鼠标从MyLineEdit
更改焦点 NOT 会触发我们QAbstractItemModel::setData
实施的调用。
此问题似乎与setFocusProxy
API有关。删除setFocusProxy
行时;
MyLineEdit
(特别是QLineEdit
)更改焦点会触发我们QAbstractItemModel::setData
实施的调用。 MyLineEdit
(特别是QTextEdit
)更改焦点 NOT 会触发我们QAbstractItemModel::setData
实施的调用。如何使用setFocusProxy
并调用QAbstractItemModel::setData
?
我做错了什么?