【问题标题】:QtLineEdit placeholder: how to have the user replace chars 1 by 1 in insert modeQLineEdit 占位符:如何让用户在插入模式下将字符 1 替换为 1
【发布时间】:2019-04-26 18:36:15
【问题描述】:

QtLineEdit - C++/Qt Creator 4.9/Qt 5.12/Windows 小部件应用程序

tldr:有没有办法防止占位符文本在用户输入时被立即擦除,而是在 INSERT 模式下逐个字符地替换它。

例子:

[ ******** ]
[ a******* ]
[ ab****** ]

这是一个很难研究的问题,因为我得到了很多关于使用相同关键字的完全不同问题的结果。

为了提供一些上下文,以防有人有一个很好但不同的方法来解决问题:

该程序是用于加密货币的个性化公共地址生成器。 用户通过编辑占位符来设计所需的地址前缀或后缀。由于生成相应的私钥变得成倍地困难,GUI 设计必须阻止替换更多的占位符字符而不是合理的。但我希望能够决定要编辑的角色位置。

有效用户输入示例(还有更多内容,但您明白了)

[test****************test]
[testest*****************]
[*****************testest]

这将使所需的输出更容易可视化

谢谢!

【问题讨论】:

  • 我不明白你,在你出版物开头的例子中我明白如果我写一个字符,它会被删除 * 但从左到右写它是正常的,在你在下半部分的例子是什么用户应该做的过程?
  • 澄清一下,这将是验证正确公共地址 nano_[13][1-9a-km-z]{59} 的正则表达式,意思是“nano_”,后跟 1 或 3,后跟除小写 L 和 0 之外的任何数字或字母(防止拼写错误)有效示例:nano_3moomoo77b45d1jug8szecomeqnmwgjbue1xaxz95s5338jsp77eho16moo 由于加密公共地址很长,而且很难生成包含 8 个以上所选字符的地址,我想提供选项来选择所述字符是否为前缀、后缀、或两者兼而有之。

标签: c++ qt user-interface


【解决方案1】:

在这种情况下,您可能希望继承 QLineEdit 并覆盖其input handling functions 之一。特别是,您可以创建调整 QLineEdit 文本的 keyPressEvent(QKeyEvent *event) 的覆盖实现。占位符文本不能永久使用,因为它与模型文本分开处理。

【讨论】:

  • 我认为这不能处理复制粘贴?可能想要实现QValidator.fixup
  • 那将是一种更通用的方法,是的;您只需要创建一个实现void QValidator::fixup(QString &input) 的QValidator 子类,以便它更新input。默认情况下,fixup() 仅在特定条件下运行,因此 QLineEdit 子类或可能仍然是为了在修改文本时调用fixup()
猜你喜欢
  • 1970-01-01
  • 2013-05-02
  • 2012-05-25
  • 2013-08-13
  • 2021-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多