我有桌子(由QTableWidget创建)。
我的表有3列
# | user | pass
用户和密码中的文字是可见的,即"用户","密码"
我想在传递中隐藏文字,如:
"********" < means "password"
在QLineEdit中称为&#34; echomode&#34;但它仅适用于QLineEdit。
我可以手动替换*的文本,但是如何从表格(课堂上)中读取此文本?
优于**将是点。 (如echomode - &gt;密码)
此致
答案 0 :(得分:1)
我会将表项文本设置为"*****"
,并将实际密码存储为具有特定角色的项目数据。例如:
// Get the password item of first row
QTableWidgetItem *passwordItem = tableWidget->item(0, 2);
passwordItem->setText("*****");
passwordItem->setData(Qt::UserRole, "the_actual_password");
可以用类似的方式提取实际密码:
QString actualPassword = passwordItem->data(Qt::UserRole).toString();
答案 1 :(得分:0)
您创建一个QStyledItemDelegate,您在视图中的密码列(而不是模型,setItemDelegateForColumn())上设置。当被要求创建编辑器(createEditor())时,它应该创建一个QLineEdit设置来隐藏回声。在决定是否隐藏密码之前,您可以让委托查看另一列中的值。
http://www.qtcentre.org/threads/55315-How-can-i-have-echomode-in-QtableView-for-password-column
答案 2 :(得分:0)
它有点老了,但我想热身一下,因为Qt5对我来说不是那么容易。
执行此操作的正确方法是使用QStyledItemDelegate并覆盖paint方法。但似乎是这样,您可以在选项视图中存储的小部件上绘画(我查看了Qt的来源)。
QStyleOptionViewItem opt = option;
initStyleOption(&opt, index);
opt.widget->style()->drawItemText(painter, opt.rect, Qt::AlignLeft, opt.palette, true, "*****");
当我不这样做时,当表格单元格的选择发生变化时,会产生很多奇怪的副作用。