Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: xintrea от Июль 15, 2008, 16:16



Название: Как после записи измененного текста QTextEdit отметить, что он "не менялся"?
Отправлено: xintrea от Июль 15, 2008, 16:16
Здравствуйте!


Что-то воткнуть не могу, как сделать следующее. Есть текстовый редактор на базе QTextEdit. И нужно сделать вот что. Если пользователь нажал кнопку "сохранить", текст сохранился в файл, и надо в каком-то свойстве установить, что текст не менялся.

Блин что-то путано получается. Скажу другими словами.

То есть нужно, чтобы сразу после сохранения, какой-то метод показывал, что содержимое не было изменено (до тех пор, естественно, пока пользователь не изменит что-нибудь в тексте). Ну то есть такое "интеллектуальное" поведение редактора, чтоб он лишний раз не просил сохранить текст при выходе, если пользователь сделал сохранение, и больше ничего не менял.

Вопрос 1. Есть ли метод, который информирует, был ли изменен текст QTextEdit? Что-то я не нашел, и на ум приходит только костыль через отловлю сигнала textChanged() и добавления своей логики по изменению дополнитеьного флага в этом обработчике.

Вопрос 2. Если такой метод есть, то можно ли принудительно в нужный момент (после сохранения текста в файл) изменить его флаг (?) так, чтобы данный метод показывал, что текст небыл изменен?


Название: Re: Как после записи измененного текста QTextEdit отметить, что он "не менялся"?
Отправлено: Karl-Philipp от Июль 15, 2008, 16:51
>>Если пользователь нажал кнопку "сохранить", текст сохранился в файл, и надо в каком-то свойстве установить, что текст _не менялся_.

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

>>То есть нужно, чтобы сразу после сохранения, метод textChanged() ...

Что за метод? Может Вы имеете в виду сигнал

Цитировать
void QTextEdit::textChanged ()   [signal]
This signal is emitted whenever the document's content changes; for example, when text is inserted or deleted, or when formatting is applied.


Название: Re: Как после записи измененного текста QTextEdit отметить, что он "не менялся"?
Отправлено: pastor от Июль 15, 2008, 16:53
см.

Цитировать
QTextDocument * QTextEdit::document () const

и  QTextDocument:

Цитировать
bool isModified () const
void setModified ( bool m = true )
void modificationChanged().


Название: Re: Как после записи измененного текста QTextEdit отметить, что он "не менялся"?
Отправлено: xintrea от Июль 15, 2008, 17:01
см.
Цитировать
QTextDocument * QTextEdit::document () const

и  QTextDocument:
Цитировать
bool isModified () const
void setModified ( bool m = true )
void modificationChanged().

Спасибо, видимо то что нужно.

Вопрос - как вы эти методы в QtAssistant находите? Вот я смотрю страницу "List of All Members for QTextEdit" и там этих методов нет.. Понятно, их и не может быть в этом списке, но это же всю иерархию надо расковырять чтоб понять что из чего состоит.. Как вы это делаете?


Название: Re: Как после записи измененного текста QTextEdit отметить, что он "не менялся"?
Отправлено: Red Devil от Июль 15, 2008, 17:54
Это методы в QTextDocument.
Они определны там потому что именно этот класс управляет содержимым текстом. QTextEdit предоставляет доступ для того чтобы этот текст изменять.


Название: Re: Как после записи измененного текста QTextEdit отметить, что он "не менялся"?
Отправлено: pastor от Июль 15, 2008, 18:12
Вопрос - как вы эти методы в QtAssistant находите? Вот я смотрю страницу "List of All Members for QTextEdit" и там этих методов нет.. Понятно, их и не может быть в этом списке, но это же всю иерархию надо расковырять чтоб понять что из чего состоит.. Как вы это делаете?

Во-первых это опыт, накомленый за годы работы на Qt. Во-вторых нужно просматривать методы класса, обращать внимание на типы возвращаемого результата, смотреть описание этих типов, ну и так далее. Походу просмотра нужно запоминать наличие тех или иных методов