如何在Qt C ++中的QLineEdit中放置一个静态文本,以便它不能删除,当我写入QLineEdit时,它不应该是间隔的。
答案 0 :(得分:5)
没有常规方法可以在QLabel
中添加前缀或后缀。
根据QLineEdit
,您可以设置一个文本,该文字将在没有文字内容时显示 - 请参阅QLineEdit::placeholderText
。
使用QLineEdit
执行此操作的另一种方法是设置inputMask
,但它会更改光标并需要特定数量的字母。
如果您知道最大符号数量并想要制作后缀,则可以使用其他QLabel
获取符号:
1.限制文本的length
以在右边有一定的自由空间
2.将QLabel
放在QLineEdit
的右侧,然后在其中输入后缀文字。
注意:如果QLabel
位于布局内,您将无法在QLineEdit
上放置QLineEdit
{Q}。在这种情况下,您可以在布局中添加QWidget
而不是QLineEdit
,并将QLineEdit
和QLabel
放在这个没有布局的小部件中。您还可以在代码中创建QLabel
:
QLabel* label = new QLabel(this);
label->setText("kg");
label->move(lineEdit->rect().right() - label->width() - 3, lineEdit->rect().center().y() - label->height() / 2);
添加后缀和前缀的最灵活方式是创建一个继承自QWidget
的新类,添加两个QLabels
(前缀和后缀)信息,在它们之间添加QLineEdit
和使用css使它们看起来像一个QLineEdit
。
在此图片上:前缀和后缀为QLabels
。 _some_text_是名为QLineEdit
的{{1}},所有这些都位于水平布局中名为lineEdit
的{{1}}内。
这是我用于上图的css:
QWidget
您可以使用它来使其更像complexLineEdit
。
答案 1 :(得分:0)
每次更改文本后,我都会动态地重新添加后缀。
我的回答是使用Python,但是希望您能从中得到启发,并且可以为将来的用户提供帮助。
def __init__(self):
...
# Connect the .textChanged signal of your QLineEdit to the method below.
self.ui.weight_le.textChanged.connect(self.enforce_line_edit_suffix)
...
def enforce_line_edit_suffix(self):
"""This method parses the QLineEdit text and makes sure the desired suffix is there."""
text = self.ui.weight_le.getText()
if not text.endswith("kg"):
self.ui.weight_le.blockSignals(True) # Prevent recursive calls to this method.
self.ui.weight_le.setText(text + "kg")
self.ui.weight_le.blockSignals(False)
或者,如果您需要几个QLineEdit
来表现那样,则可以使用:
def __init__(self):
...
# Connect the .textChanged signal of your QLineEdit's to the method below
# and force the "suffix" parameter.
self.ui.weight_le.textChanged.connect(lambda: self.enforce_line_edit_suffix(suffix="kg"))
self.ui.bias_le.textChanged.connect(lambda: self.enforce_line_edit_suffix(suffix="V"))
self.ui.capacitance_le.textChanged.connect(lambda: self.enforce_line_edit_suffix(suffix="µF"))
...
def enforce_line_edit_suffix(self, suffix):
"""This method parses the QLineEdit text and makes sure the desired suffix is there."""
line_edit = self.sender() # A reference to which QLineEdit triggered the method.
text = line_edit.getText()
if not text.endswith(suffix):
line_edit.blockSignals(True) # Prevent recursive calls to this method.
line_edit.setText(text + suffix)
line_edit.blockSignals(False)
为了提高安全性,我们还可以想象检查一下文本(一旦除去后缀)是否仅包含+-.,0123456789
,否则您的用户可以键入1.23 kgkg
,这样仍然可以使用。