Как было сказано ранее вся работа с файлами в QtCreator ведется через наследник интерфейса IFile, который в TextEditor'е в свою очередь привязан к QTextDocument.Но, мы можем создать своего наследника класса TextEditor::BaseTextDocument (который в плагине TextEditor и является наследником IFile).
Нам надо переопределить всего один метод - save():
bool XmlSourceDocument::save(const QString &fileName) {
emit saveRequested(); bool result = TextEditor::BaseTextDocument::save(fileName); emit saveFinished(); return result; }
|
Так как наш класс работы с файлом ничего не знает и знать не должен о редакторе, он просто кидает два сигнала, один перед сохранением, другой сразу после.
И теперь передадим его инстанс в TextEditor:
XmlSourceEditor::XmlSourceEditor(XmlEditorWidget *widget, QWidget *parent) : TextEditor::PlainTextEditor(parent), editorWidget(widget) {
XmlSourceDocument *doc = new XmlSourceDocument(); connect(doc, SIGNAL(saveRequested()), this, SLOT(performPreSave()), Qt::DirectConnection); connect(doc, SIGNAL(saveFinished()), editorWidget, SLOT(documentSaved())); doc->setMimeType(QLatin1String(XmlTreeEditor::Constants::XML_MIME_TYPE)); setBaseTextDocument(doc); connect(file(), SIGNAL(changed()), this, SLOT(configure())); }
|
Подключаем два сигнала к нужным слотам (перед сохранением нам нужно обновить содержимое текстового редактора, после сохранения нам нужно сбросить флаг модификации), задаем MIME-тип нашего файла, подставляем его как используемый BaseTextDocument и подключаем последний слот (для корректной внутренней работы TextEditor'а).
Собственно все :). Теперь сохранение файла работает корректно.
Комментариев нет:
Отправить комментарий