在我的应用程序中,用户在QLineEdit中键入他的密码。QLineEdit在口令回显模式下工作。
应用程序必须在不再需要密码时将其从内存中清除。
QLineEdit是否确保在释放所有内部内存缓冲区之前将其清除?我在文档中找不到这样的信息。
如果QLineEdit不清除其内容,那么实现此类行为的最简单方法是什么?我希望尽可能多地重用QLineEdit功能,而不是从头开始实现我自己的密码编辑控件。有可能吗?
发布于 2013-11-19 02:55:14
请注意,即使在调用setText({})不是完全安全的情况下-如果您的应用程序被换出,字符串也可能被写入交换空间。防止这种情况的唯一方法是自己为lineEdit的内部字符串分配内存,并对其调用mlock()以防止交换。为此,您需要编写自己的lineEdit。
此外,在将运行时内省工具(如Gammaray )附加到应用程序时,文本非常容易弄清楚,因为它是一个普通的QObject属性,并以混淆方式存储在内存中。
此外,通过查看QWidgetLineControl::internalSetText (请参阅the code)的实现,似乎可以将行编辑文本用于辅助功能接口,除非辅助功能支持没有编译到Qt中,否则每个人都可以访问该接口。
因此,根据您的安全级别,您确实需要自己的实现。
发布于 2013-11-18 21:04:38
我觉得给你打电话
QLineEdit::setText("");就能完成这项工作。正如Qt documentation所说:
设置此属性将清除选定内容,清除撤消/重做历史记录,将光标移动到行尾,并将modified属性重置为false。
相反,调用QLineEdit::clear()将仅清除文本,但是撤消/重做堆栈仍将包含以前的文本。
https://stackoverflow.com/questions/20048081
复制相似问题