Squeak.ru - шаблоны программирования

Как поставить статический текст (постфикс, префикс) в QLineEdit?

Как поместить статический текст в QLineEdit в Qt C++, чтобы он удалить нельзя и когда я пишу в QLineEdit, то не должно быть пробела.

05.12.2014

  • Не могли бы вы привести пример использования? Я не могу понять, что должно происходить со статическим текстом при вводе нового текста. 05.12.2014
  • Вы говорите о префиксной/постфиксной строке, которая всегда присутствует? 05.12.2014
  • например: qlineedit используется для ввода веса, поэтому я хочу, чтобы в конце редактирования строки было написано: кг 05.12.2014

Ответы:


1

Не существует обычного способа поставить префикс или постфикс в 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.

05.12.2014
  • как я могу ввести постфикс для метки? 05.12.2014
  • Я имею в виду постфиксный текст. Используйте обычное свойство text. Добавлен css и скриншоты всех вариантов. 05.12.2014
  • но что это за постфиксная метка? где я могу найти это? 05.12.2014
  • Создайте QLabel в QtDesigner или в коде и поместите QLabel справа от QLineEdit. 05.12.2014
  • Добавлено ПРИМЕЧАНИЕ в раздел «Postfix с QLabel». 05.12.2014

  • 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)
    

    В качестве альтернативы, если вам нужно, чтобы несколько 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, и это все равно будет работать.

    27.11.2019
    Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...