fix: tab close button does not work
This commit is contained in:
@ -140,12 +140,18 @@ void TabWidget::closeCurrentTab()
|
|||||||
|
|
||||||
bool TabWidget::closeTab(int index)
|
bool TabWidget::closeTab(int index)
|
||||||
{
|
{
|
||||||
|
qDebug() << "closeTab called with index:" << index << "count:" << count();
|
||||||
|
|
||||||
if (index < 0 || index >= count()) {
|
if (index < 0 || index >= count()) {
|
||||||
|
qDebug() << "Invalid index, returning false";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int docId = m_tabToDocumentId.value(index, -1);
|
int docId = m_tabToDocumentId.value(index, -1);
|
||||||
|
qDebug() << "Document ID for index" << index << "is" << docId;
|
||||||
|
|
||||||
if (docId == -1) {
|
if (docId == -1) {
|
||||||
|
qDebug() << "No document ID found for index, returning false";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -185,29 +191,7 @@ bool TabWidget::closeTab(int index)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 移除标签页
|
qDebug() << "Proceeding to close tab";
|
||||||
QWidget *widget = this->widget(index);
|
|
||||||
removeTab(index);
|
|
||||||
|
|
||||||
// 清理映射关系
|
|
||||||
m_tabToDocumentId.remove(index);
|
|
||||||
m_documentIdToTab.remove(docId);
|
|
||||||
|
|
||||||
// 更新其他标签页的索引映射
|
|
||||||
QHash<int, int> newTabToDocumentId;
|
|
||||||
QHash<int, int> newDocumentIdToTab;
|
|
||||||
|
|
||||||
for (int i = 0; i < count(); ++i) {
|
|
||||||
int oldIndex = (i >= index) ? i + 1 : i;
|
|
||||||
int oldDocId = m_tabToDocumentId.value(oldIndex, -1);
|
|
||||||
if (oldDocId != -1) {
|
|
||||||
newTabToDocumentId[i] = oldDocId;
|
|
||||||
newDocumentIdToTab[oldDocId] = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
m_tabToDocumentId = newTabToDocumentId;
|
|
||||||
m_documentIdToTab = newDocumentIdToTab;
|
|
||||||
|
|
||||||
// 清理编辑器和文档
|
// 清理编辑器和文档
|
||||||
if (m_editors.contains(docId)) {
|
if (m_editors.contains(docId)) {
|
||||||
@ -218,6 +202,36 @@ bool TabWidget::closeTab(int index)
|
|||||||
|
|
||||||
m_documentManager->closeDocument(docId);
|
m_documentManager->closeDocument(docId);
|
||||||
|
|
||||||
|
// 移除标签页
|
||||||
|
QWidget *widget = this->widget(index);
|
||||||
|
removeTab(index);
|
||||||
|
|
||||||
|
// 清理和更新映射关系
|
||||||
|
m_tabToDocumentId.remove(index);
|
||||||
|
m_documentIdToTab.remove(docId);
|
||||||
|
|
||||||
|
// 更新后续标签页的索引映射(索引减1)
|
||||||
|
QHash<int, int> newTabToDocumentId;
|
||||||
|
QHash<int, int> newDocumentIdToTab;
|
||||||
|
|
||||||
|
for (auto it = m_tabToDocumentId.begin(); it != m_tabToDocumentId.end(); ++it) {
|
||||||
|
int tabIndex = it.key();
|
||||||
|
int documentId = it.value();
|
||||||
|
|
||||||
|
if (tabIndex > index) {
|
||||||
|
// 后续标签页的索引需要减1
|
||||||
|
newTabToDocumentId[tabIndex - 1] = documentId;
|
||||||
|
newDocumentIdToTab[documentId] = tabIndex - 1;
|
||||||
|
} else {
|
||||||
|
// 前面的标签页索引不变
|
||||||
|
newTabToDocumentId[tabIndex] = documentId;
|
||||||
|
newDocumentIdToTab[documentId] = tabIndex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_tabToDocumentId = newTabToDocumentId;
|
||||||
|
m_documentIdToTab = newDocumentIdToTab;
|
||||||
|
|
||||||
if (widget) {
|
if (widget) {
|
||||||
widget->deleteLater();
|
widget->deleteLater();
|
||||||
}
|
}
|
||||||
@ -227,6 +241,7 @@ bool TabWidget::closeTab(int index)
|
|||||||
newDocument();
|
newDocument();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qDebug() << "Tab closed successfully";
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -280,6 +295,7 @@ void TabWidget::onCurrentChanged(int index)
|
|||||||
|
|
||||||
void TabWidget::onTabCloseRequested(int index)
|
void TabWidget::onTabCloseRequested(int index)
|
||||||
{
|
{
|
||||||
|
qDebug() << "Tab close requested for index:" << index;
|
||||||
closeTab(index);
|
closeTab(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,7 +35,6 @@ public:
|
|||||||
|
|
||||||
signals:
|
signals:
|
||||||
void currentEditorChanged(SciEdit *editor);
|
void currentEditorChanged(SciEdit *editor);
|
||||||
void tabCloseRequested(int index);
|
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void onCurrentChanged(int index);
|
void onCurrentChanged(int index);
|
||||||
|
Reference in New Issue
Block a user