#pragma once #include #include class SciEdit; class DocumentManager; class TabWidget : public QTabWidget { Q_OBJECT public: explicit TabWidget(DocumentManager *documentManager, QWidget *parent = nullptr); ~TabWidget(); // 标签页管理 int newDocument(); int openDocument(const QString &filePath); bool saveCurrentDocument(); bool saveCurrentDocumentAs(); void closeCurrentTab(); bool closeTab(int index); void closeAllTabs(); // 获取当前编辑器和文档信息 SciEdit *currentEditor() const; SciEdit *editorAt(int index) const; int currentDocumentId() const; int documentIdAt(int index) const; // 标签页操作 void setCurrentTab(int index); int findTabByDocumentId(int docId) const; signals: void currentEditorChanged(SciEdit *editor); void tabCloseRequested(int index); private slots: void onCurrentChanged(int index); void onTabCloseRequested(int index); void onDocumentModified(int docId, bool modified); void onDocumentTitleChanged(int docId, const QString &title); void onEditorTextChanged(); private: DocumentManager *m_documentManager; QHash m_tabToDocumentId; // tab index -> document id QHash m_documentIdToTab; // document id -> tab index QHash m_editors; // document id -> editor SciEdit *createEditor(); void updateTabTitle(int tabIndex); void connectEditorSignals(SciEdit *editor); void disconnectEditorSignals(SciEdit *editor); };