【问题标题】:How to put a static text (postfix, prefix) in QLineEdit?如何在 QLineEdit 中放置静态文本(后缀、前缀)?
【发布时间】:2015-02-03 08:50:51
【问题描述】:

如何在 Qt C++ 中将静态文本放在QLineEdit 中,这样它就不能被删除,并且当我写入 QLineEdit 时,它不应该被隔开。

【问题讨论】:

  • 您能提供一个使用示例吗?当您键入新文本时,我无法理解静态文本会发生什么。
  • 你说的是始终存在的前缀/后缀字符串吗?
  • 例如:qlineedit 用于放置重量,所以我想在行尾编辑:kg

标签: macos qt qlineedit


【解决方案1】:

QLabel 中放置前缀或后缀没有常规方法。

占位符

你可以用QLineEdit 设置一个文本,当没有文本时显示 - 请参阅QLineEdit::placeholderText

输入掩码

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

带有 QLabel 的后缀

如果你知道符号的最大数量并且想要做一个后缀,你可以用另一个QLabel得到它:
1.限制length的文字在右边有一定的空闲空间。
2. 将QLabel放在QLineEdit的右侧,并在其中输入一个后缀文本。

注意:如果 QLineEdit 位于布局内部,您将无法在 QtDesigner 中将 QLabel 放在 QLineEdit 上。在这种情况下,您可以在布局中添加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);

自定义小部件

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

在这张图片上:前缀和后缀是QLabels。 _some_text_ 是QLineEdit,名为lineEdit,并且它们都在一个名为complexLineEditQWidget 中,处于水平布局中。

这是我用于上图的 css:

QWidget#complexLineEdit
{
  border-top: 1px solid #CCCCCC;
  border-left: 1px solid #DDDDDD;
  border-right: 1px solid #DDDDDD;
  border-bottom: 1px solid #DDDDDD; 
  background-color: white;
}

QWidget#complexLineEdit QLineEdit#lineEdit
{
   border: 0px;
}

您可以使用它来使其与QLineEdit 更加相似。

【讨论】:

  • 如何输入后缀来标注?
  • 我的意思是后缀文本。使用常规的text 属性。添加了所有选项的 css 和屏幕截图。
  • postfixLabel->setText("some text");
  • 但是这个后缀标签是什么?我在哪里可以找到这个?
  • 在 QtDesigner 或代码中创建 QLabel 并“将 QLabel 放在 QLineEdit 的右侧”。
【解决方案2】:

我只是在每次文本更改后动态重新添加后缀。

我的答案是用 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)

或者,如果您需要多个 QLineEdits 来表现这种行为,您可以使用:

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,但仍然可以。

【讨论】:

    猜你喜欢
    • 2012-07-15
    • 2020-01-06
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多