首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在输入QLineEdit时将缺省游标模式从insert更改为overwrite

如何在输入QLineEdit时将缺省游标模式从insert更改为overwrite
EN

Stack Overflow用户
提问于 2020-08-05 18:03:23
回答 3查看 367关注 0票数 0

正如标题所暗示的,我的目标是将默认光标模式(插入字符)更改为覆盖模式。

我有一个附加到QLineEdit对象的验证器

代码语言:javascript
运行
复制
expression = QtCore.QRegExp(r'(^[A-Z0-9_]{4})-([A-Z0-9_]{6})-([A-Z0-9_]{6})-([A-Z0-9_]{4})-([A-Z0-9_]{2})-([A-Z0-9_]{6})')
object = QtGui.QRegExpValidator(expression, self)

QLineEdit组件的默认值为:

代码语言:javascript
运行
复制
object.setText('____-______-______-____-__-______')

当输入QLineObject时,为了写任何东西,我必须选择一个下划线,将其更改为所需的字符,然后选择另一个字符,依此类推。或者,我可以选择整个字符串,删除它,然后写入完整的字符串。然而,重点是,有时我必须在不同的位置更改一些字符串,并保持下划线不变。一个接一个地选择和更改字符是可行的,但很繁琐。当光标焦点在一个对象上时,将光标模式从insert更改为overwrite将是更清晰的解决方案。

EN

回答 3

Stack Overflow用户

发布于 2020-08-06 00:59:00

QLineEdit没有覆盖模式。但是QTextEdit和QPlainTextEdit有overwriteMode和setOverwriteMode(bool)。如果你可以使用QTextEdit,你可以继承它并拥有你自己的keyReleaseEvent。这里有一个测试覆盖模式的快速示例。每次用户按下键盘上的Insert键时,overwriteMode都会被切换。

代码语言:javascript
运行
复制
from PyQt5.QtWidgets import (QApplication, QMainWindow, QTextEdit)
from PyQt5 import QtCore
import sys

class OverwriteTextBox(QTextEdit):
    def __init__(self, parent=None):
        super(OverwriteTextBox, self).__init__(parent=parent)
        
    def keyReleaseEvent(self, event):
        key = event.key()
        
        if (key == QtCore.Qt.Key_Insert):
            print('insert')
            self.setOverwriteMode(not self.overwriteMode())
        else:
            # release keyrelease for normal behaviors
            super().keyReleaseEvent(event)

class Example(QMainWindow):
    def __init__(self, parent=None):
     
        super(Example, self).__init__(parent=parent)

        self.setGeometry(300, 200, 570, 450)
        self.setWindowTitle("Overwrite test")            
        self.textbox = OverwriteTextBox(parent=self)
        self.textbox.setGeometry(50, 50, 200, 50)

app = QApplication(sys.argv)
example = Example()         
example.show()
sys.exit(app.exec_() )
票数 2
EN

Stack Overflow用户

发布于 2020-08-05 18:29:31

看起来您需要设置inputMask()属性。

在您的情况下,它应该是:

代码语言:javascript
运行
复制
    object.setInputMask(
        '>NNNN-NNNNNN-NNNNNN-NNNN-NN-NNNNNN;_'

N掩码字符用于字母数字字符,如果前面带有>,则表示后面的所有字母都将是大写的。分号后面的任何字符集都用作占位符。

票数 1
EN

Stack Overflow用户

发布于 2020-08-06 01:46:59

仅供参考。musicamante提出的解决方案似乎工作得很好。只有一处修改。假设QRegExpValidator使用的正则表达式如下:

代码语言:javascript
运行
复制
expression = QtCore.QRegExp(r'(^[A-Z0-9_]{4})-([A-Z0-9_]{6})-([A-Z0-9_]{6})-([A-Z0-9_]{4})-([A-Z0-9_]{2})-([A-Z0-9_]{6})')

输入掩码应使用空格作为用于空字符的字符

代码语言:javascript
运行
复制
object.setInputMask('>XXXX-XXXXXX-XXXXXX-XXXX-XX-XXXXXX; ')

使用下划线作为正则表达式字符串中的字符之一,并替换InputMask中的空值,我遇到了一些类似下面这样的奇怪结果

而不是期望的

无论如何,再次感谢您的快速帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63262810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档