如何在QLineEdit中放置静态文本(后缀,前缀)?

时间:2014-12-05 08:19:57

标签: macos qt qlineedit

如何在Qt C ++中的QLineEdit中放置一个静态文本,以便它不能删除,当我写入QLineEdit时,它不应该是间隔的。

2 个答案:

答案 0 :(得分:5)

没有常规方法可以在QLabel中添加前缀或后缀。

占位符

根据QLineEdit,您可以设置一个文本,该文字将在没有文字内容时显示 - 请参阅QLineEdit::placeholderText

enter image description here

输入掩码

使用QLineEdit执行此操作的另一种方法是设置inputMask,但它会更改光标并需要特定数量的字母。

enter image description here

使用QLabel

的后缀

如果您知道最大符号数量并想要制作后缀,则可以使用其他QLabel获取符号:
1.限制文本的length以在右边有一定的自由空间 2.将QLabel放在QLineEdit的右侧,然后在其中输入后缀文字。

注意:如果QLabel位于布局内,您将无法在QLineEdit上放置QLineEdit {Q}。在这种情况下,您可以在布局中添加QWidget而不是QLineEdit,并将QLineEditQLabel放在这个没有布局的小部件中。您还可以在代码中创建QLabel

QLabel* label = new QLabel(this);
label->setText("kg");
label->move(lineEdit->rect().right() - label->width() - 3, lineEdit->rect().center().y() - label->height() / 2);

enter image description here

自定义窗口小部件

添加后缀和前缀的最灵活方式是创建一个继承自QWidget的新类,添加两个QLabels(前缀和后缀)信息,在它们之间添加QLineEdit和使用css使它们看起来像一个QLineEdit

enter image description here

在此图片上:前缀和后缀为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,这样仍然可以使用。