#pragma once #include #include #include #include #include class DocumentManager : public QObject { Q_OBJECT public: explicit DocumentManager(QObject *parent = nullptr); ~DocumentManager(); // 文档管理 int createNewDocument(); int openDocument(const QString &filePath); bool saveDocument(int docId); bool saveDocumentAs(int docId, const QString &filePath); void closeDocument(int docId); // 文档信息 QString getDocumentTitle(int docId) const; QString getDocumentFilePath(int docId) const; QString getDocumentContent(int docId) const; QString getDocumentEncoding(int docId) const; QString getDocumentLanguage(int docId) const; bool isDocumentModified(int docId) const; bool isDocumentUntitled(int docId) const; // 文档内容操作 void setDocumentContent(int docId, const QString &content); void setDocumentModified(int docId, bool modified); void setDocumentEncoding(int docId, const QString &encoding); void setDocumentLanguage(int docId, const QString &language); // 获取所有文档 QList getAllDocumentIds() const; int getDocumentCount() const; signals: void documentCreated(int docId); void documentOpened(int docId, const QString &filePath); void documentSaved(int docId, const QString &filePath); void documentClosed(int docId); void documentModified(int docId, bool modified); void documentTitleChanged(int docId, const QString &title); private: struct DocumentInfo { int id; QString title; QString filePath; QString content; QString encoding; QString language; bool modified; bool untitled; }; QHash m_documents; int m_nextDocumentId; static int s_untitledCounter; QString generateUntitledName(); QString detectLanguageFromExtension(const QString &filePath); };