Qt 如果QDataWidgetMapper映射的数据为只读,如何将QLineEdit设置为只读?
我有一个树模型,并使用Qt 如果QDataWidgetMapper映射的数据为只读,如何将QLineEdit设置为只读?,qt,pyqt,model-view,Qt,Pyqt,Model View,我有一个树模型,并使用QDataWidgetMapper将模型数据映射到一些小部件 在模型中,一些数据被标记为只读,因此,我想做的是让映射的小部件(例如,QLineEdit)能够根据该标记进行操作,并在其指向的模型数据为只读时将自身设置为只读 感谢您的帮助 Qt的QAbstractDataModel接口没有将数据段的可写性作为属性公开:您无法读取任何内容来知道是否可以修改某个项。你可以想到一些非常规的黑客行为,比如试图写回项目的当前值以检查它是否可以更改。它们只是黑客行为,例如,如果新值等于旧值
QDataWidgetMapper
将模型数据映射到一些小部件
在模型中,一些数据被标记为只读,因此,我想做的是让映射的小部件(例如,QLineEdit
)能够根据该标记进行操作,并在其指向的模型数据为只读时将自身设置为只读
感谢您的帮助 Qt的
QAbstractDataModel
接口没有将数据段的可写性作为属性公开:您无法读取任何内容来知道是否可以修改某个项。你可以想到一些非常规的黑客行为,比如试图写回项目的当前值以检查它是否可以更改。它们只是黑客行为,例如,如果新值等于旧值,则履行Qt规定的合同的模型可能会从setData
返回true
,即使在只读项上也是如此
如果您使用的模型公开了writability属性,您需要从
QDataWidgetMapper
派生并自己实现该功能。Qt的QAbstractDataModel
接口不会将数据段的可写性作为属性公开:您无法读取任何内容来了解某个项是否可以修改。你可以想到一些非常规的黑客行为,比如试图写回项目的当前值以检查它是否可以更改。它们只是黑客行为,例如,如果新值等于旧值,则履行Qt规定的合同的模型可能会从setData
返回true
,即使在只读项上也是如此
如果您使用的模型公开了writability属性,那么您需要从
QDataWidgetMapper
派生并自己实现该功能。?对于QDataWidgetMapper本身来说似乎是一个有趣的功能。。。介意在bugtracker上建议吗?@peppe我相信已经有人提交了Qt4.8的bug报告,()。然后,由于Qt4向Qt5的转变,它被关闭。我不熟悉Qt bug报告是如何工作的,但我会在有时间的时候研究它。@ekhumoro谢谢你的建议,它应该会工作的。我真的希望QDataWidgetMapper能够理解这些标志:(?对于QDataWidgetMapper本身来说似乎是一个有趣的功能…介意在bugtracker上建议它吗?@peppe我相信有人已经提交了Qt4.8的bug报告,()。然后由于Qt4到Qt5的转换而关闭。我不熟悉Qt错误报告的工作原理,但会在有时间时进行研究。@ekhumoro感谢您的建议,它应该可以工作。我真的希望QDataWidgetMapper能够理解这些标志:(>>Qt的QAbstractDataModel接口不公开数据段的可写性>>Qt的QAbstractDataModel接口不公开数据段的可写性