Как поместить статический текст в QLineEdit в Qt C++, чтобы он удалить нельзя и когда я пишу в QLineEdit, то не должно быть пробела.
Как поставить статический текст (постфикс, префикс) в QLineEdit?
- Не могли бы вы привести пример использования? Я не могу понять, что должно происходить со статическим текстом при вводе нового текста. 05.12.2014
- Вы говорите о префиксной/постфиксной строке, которая всегда присутствует? 05.12.2014
- например: qlineedit используется для ввода веса, поэтому я хочу, чтобы в конце редактирования строки было написано: кг 05.12.2014
Ответы:
Не существует обычного способа поставить префикс или постфикс в QLabel
.
Заполнитель
Насколько вы можете получить с помощью QLineEdit
, это установить текст, который будет отображаться, когда внутри нет текста - см. QLineEdit::placeholderText
.
Маска ввода
Другой способ сделать это с помощью QLineEdit
— установить inputMask
, но это изменит курсор и потребует определенного количества букв.
Постфикс с QLabel
Если вы знаете максимальное количество символов и хотите сделать постфикс, вы можете получить его с помощью другого QLabel
:
1. Ограничьте length
текста, чтобы справа было определенное свободное место.
2. Поместите QLabel
в конец справа от QLineEdit
и введите в него постфиксный текст.
ПРИМЕЧАНИЕ: вы не сможете поместить QLabel
на QLineEdit
в QtDesigner, если QLineEdit
находится внутри макета. В этом случае вы можете добавить 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
имя lineEdit
, и все они находятся внутри QWidget
имени complexLineEdit
в горизонтальном расположении.
Вот 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
.
Я бы просто динамически добавлял суффикс после каждого изменения текста.
Мой ответ на 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
, и это все равно будет работать.
text
. Добавлен css и скриншоты всех вариантов. 05.12.2014