在QtableWidget中将列中的文本隐藏为密码点

时间:2014-07-31 22:20:28

标签: c++ qt

我有桌子(由QTableWidget创建)。

我的表有3列

# | user | pass

用户和密码中的文字是可见的,即"用户","密码"

我想在传递中隐藏文字,如:

"********" < means "password"

在QLineEdit中称为&#34; echomode&#34;但它仅适用于QLineEdit。

我可以手动替换*的文本,但是如何从表格(课堂上)中读取此文本?

优于**将是点。 (如echomode - &gt;密码)

此致

3 个答案:

答案 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, "*****");

当我不这样做时,当表格单元格的选择发生变化时,会产生很多奇怪的副作用。