Перейти к содержимому

Qtextedit qt как получить текст

  • автор:

Qtextedit qt как получить текст

На этом шаге рассмотрим класс QTextEdit многострочного текстового редактора.

Класс QTextEdit позволяет осуществлять просмотр и редактирование как простого текста, так и текста в формате HTML. Он унаследован от класса QAbstractScrollArea, что дает возможность автоматически отображать полосы прокрутки, если текст не может быть полностью отображен в отведенной для него области.

Если вам нужен редактор для обычного текста, то целесообразнее будет воспользоваться вместо класса QTextEdit классом QPlaintTextEdit. Класс QPlaintTextEdit не поддерживает RTF (Rich Text Format, формат обогащенного текста), в силу чего является более легковесным, простым и эффективным.

Класс QTextEdit содержит следующие методы:

  • setReadOnly() устанавливает или снимает режим блокировки изменения текста;
  • text() возвращает текущий текст.

Слоты класса QTextEdit:

  • setPlainText() — установка обычного текста;
  • setHtml() — установка текста в формате HTML;
  • copy(), cut() и paste() — работа с буфером обмена (копировать, вырезать и вставить соответственно);
  • selectAll() или deselect() — выделение или снятие выделения всего текста;
  • clear() — очистка поля ввода.
  • textChanged() — отправляется при изменении текста;
  • selectionChanged() — отправляется при изменениях выделения текста.

Для работы с выделенным текстом служит класс QTextCursor, и объект этого класса содержится в классе QTextEdit. Класс QTextCursor предоставляет методы для создания участков выделения текста, получения содержимого выделенного текста и его удаление.

Указатель на объект класса QTextCursor можно получить вызовом метода QTextEdit::textCursor().

Виджеты класса QTextEdit также содержат в себе объект QTextDocument, указатель на который можно получить посредством метода QTextEdit::document(). Можно также присвоить другой документ при помощи метода QTextEdit::setDocument().

Класс QTextDocument предоставляет слот undo() (для отмены) или redo() (для повтора действий). При вызове слотов undo() и redo() посылаются сигналы undoAvailable(bool) и redoAvailable(bool), сообщающие об успешном (или безуспешном) проведении операции. Эти сигналы отправляются как из класса QTextDocument, так и из QTextEdit. В большинстве случаев удобнее будет использовать сигналы класса QTextEdit.

Большинство методов класса QTextEdit являются делегирующими для класса QTextDocument. Например, как уже было сказано ранее, класс QTextEdit способен отображать файлы с кодом на языке HTML, содержащие таблицы и растровые изображения. Для его размещения и показа можно воспользоваться методом setHtml(), в который передается строка, содержащая в себе текст в формате HTML, или воспользоваться слотом insertHtml(). Эти методы определены в обоих классах, и их вызов из объекта класса QTextEdit приведет к тому, что будет вызван аналогичный метод из объекта класса QTextDocument.

Для помещения обычного текста в область виджета можно воспользоваться методом setPlainText() или слотом insertPlainText(). При помощи слота append() осуществляется добавление текста, причем добавленный текст не вносится в список операций, действие которых можно вернуть с помощью слота undo(), что делает этот слот быстрым и не требующим дополнительных затрат памяти. Метод find() может быть использован для поиска и выделения заданной строки в тексте.

Слоты zoomIn() и zoomOut() предназначены для увеличения или уменьшения размера шрифта, и их действие не распространяется на растровые изображения.

Приведенный на рис. 1 пример отображает HTML-документ. Текст документа можно редактировать.

Рис.1. Пример отображения HTML-документа

В листинге приводится фрагмент текста из файла приложения, окно которого показано на рис. 1:

    » «
  • setReadOnly() устанавливает или снимает режим блокировки изменения текста;» «
  • text() возвращает текущий текст.» «
    » «
  • setPlainText() — установка обычного текста;» «
  • setHtml() — установка текста в формате HTML;» «
  • copy(), cut() и paste() — работа с буфером обмена (копировать, вырезать и вставить соответственно);» «
  • selectAll() или deselect() — выделение или снятие выделения всего текста;» «
  • clear() — очистка поля ввода.» «

Файлы приложения можно взять здесь.

На следующем шаге рассмотрим запись содержимого объекта в файл.

Как получить строку из QTextEdit?

Нет, мне нужно получить определённую строку из формы, а не просто перевести в другой тип. Прочитайте внимательнее вопрос.

14 фев 2012 в 13:45
error: ‘class QTextEdit’ has no member named ‘getText’ ^
10 апр 2017 в 12:26

  • c
  • qt
  • c++
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.8.3130

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Как вывести текст из QTextEdit в переменную?

Здравствуйте! Пытаюсь понять как вывести текст из редактора в переменную, окно программы запускается, но после нажатия кнопки (вызова функции) возникает такая ошибка: AttributeError: ‘bool’ object has no attribute ‘textEdit’

import sys from PyQt5.QtWidgets import * class Example(QWidget): def __init__(self): super().__init__() self.setWindowTitle("Пример") self.textEdit = QTextEdit(self) self.textEdit.toPlainText() self.pushButton = QPushButton('ok', self) self.pushButton.move(50, 50) self.pushButton.clicked.connect(click) def click(self): text = self.textEdit.toPlainText() print(text) if __name__ == '__main__': app = QApplication(sys.argv) form = Example() form.show() app.exec()
  • Вопрос задан более двух лет назад
  • 526 просмотров

4 комментария

Простой 4 комментария

Работа с текстом в QTextEdit

Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Подписка на обсуждение 3
Подписка на раздел 237

Вам это нравится? Поделитесь в социальных сетях!

Вы такое хотите сделать?
Когда тыкайте исчезает автоматически

Evgenii Legotckoi

  • Evgenii Legotckoi → WXQ
  • #
  • 7 августа 2018 г. 13:06

Нет. Здесь нужно сделать поведение, как в консоли, то есть имеется путь, который не получается удалить, а дальше уже можно вводить текст.
Здесь нужна переменная QString , куда будет записываться нередактируемый текст, а потом выводить этот текст при обработке нажатий клавиш, а также следить за позицией курсора, чтобы не дать передвинуться на место нередактируемого текста. То есть прибавлять перед строкой этот нередактируемый текст, а за счёт этого текста сдвигать вводимый текст на позицию, равную длине этого текста, если понятно выразился.

В общем более замороченно, чем простой placeholder.

Нужно наследоваться от QTextEdit для этого.

Arrow

  • Arrow → Evgenii Legotckoi
  • #
  • 7 августа 2018 г. 13:11

Что-то мне подсказывало, что без моего любимого 🙂 наследования не обойтись.

Evgenii Legotckoi

  • Evgenii Legotckoi
  • #
  • 7 августа 2018 г. 13:18
  • (ред.)
  • Ответ был помечен как решение.

Встроенного такого функционала там нет, а без наследования бардак будет.

Там как минимум потребуется две переменных в секции private

private: int m_fixedStartPosition; QString m_caption;

Первая — это длина этого текста, чтобы проще было понимать, где заканчивается нередактируемая часть, а где начинается редактируемая,

Вторая — это тот нередактируемый текст

Также придётся обрабатывать все кнопки BackSpace и Enter, то есть переопределять метод keyEvent. По сути это эмулятор терминала получается

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *