09 fileFilters = tr("Text files (*.txt)\nAll files (*)");
10 connect(document, SIGNAL(contentsChanged),
11 this, SLOT(documentWasModified));
12 setWindowIcon(QPixmap(":/images/document.png"));
13 setAttribute(Qt::WA_DeleteOnClose);
14 }
Сначала мы создаем действие
Поскольку мы разрешаем пользователям создавать любое количество окон редактора, мы должны предусмотреть соответствующую систему их наименования, чтобы они отличались до первого их сохранения. Один из распространенных методов решения этой проблемы заключается в назначении имен с числами (например,
Мы связываем сигнал текстового документа
Наконец, мы устанавливаем атрибут
После выпрлнения конструктора мы ожидаем вызова либо функции
01 void Editor::newFile
02 {
03 static int documentNumber = 1;
04 curFile = tr("document%1.txt").arg(documentNumber);
05 setWindowTitle(curFile + "[*]");
06 action->setText(curFile);
07 isUntitled = true;
08 ++documentNumber;
09 }
Функция
Маркер «[*]» в заголовке окна указывает место, где мы хотим выдавать звездочку при несохраненных изменениях файла для платформ, отличных от Mac OS X. Мы рассматривали этот маркер в главе 3.
01 bool Editor::open
02 {
03 QString fileName = QFileDialog::getOpenFileName(
04 this, tr("Open"), fileFilters);
05 if(fileName.isEmpty)
06 return false;
07 return openFile(fileName);
08 }
Функция
01 bool Editor::save
02 {
03 if (isUntitled) {
04 return saveAs;
05 } else {
06 return saveFile(curFile);
07 }
Функция
01 void Editor::closeEvent(QCloseEvent *event)
02 {
03 if (okToContinue) {
04 event->accept;
05 } else {
06 event->ignore;
07 }
08 }
Функция
01 void Editor::setCurrentFile(const QString &fileName)
02 {
03 curFile = fileName;
04 isUntitled = false;
05 action->setText(strippedName(curFile));
06 document->setModified(false);
07 setWindowTitle(strippedName(curFile) + "[*]");
08 setWindowModified(false);
09 }