FancyTabWidget: Set tab text after setting data

Fixes crash when enabling a tab.
This commit is contained in:
Jonas Kvinge
2024-11-02 01:29:40 +01:00
parent 4c0220d10a
commit a30aca4759
2 changed files with 31 additions and 11 deletions

View File

@@ -93,8 +93,8 @@ bool FancyTabWidget::EnableTab(QWidget *widget_view) {
FancyTabData *tab = tabs_.value(widget_view);
if (QTabWidget::indexOf(tab->page()) >= 0) return true;
const int idx = QTabWidget::insertTab(count(), tab->page(), tab->icon(), tab->label());
tabBar()->setTabData(idx, QVariant(tab->name()));
(void)InsertTab(count(), tab);
return true;
@@ -126,11 +126,8 @@ void FancyTabWidget::LoadSettings(const QString &settings_group) {
}
s.endGroup();
QMultiMap <int, FancyTabData*> ::iterator i;
for (i = tabs.begin(); i != tabs.end(); ++i) {
FancyTabData *tab = i.value();
const int idx = insertTab(i.key(), tab->page(), tab->icon(), tab->label());
tabBar()->setTabData(idx, QVariant::fromValue<FancyTabData*>(tab));
for (QMultiMap <int, FancyTabData*> ::iterator it = tabs.begin(); it != tabs.end(); ++it) {
(void)InsertTab(it.key(), it.value());
}
}
@@ -208,15 +205,13 @@ void FancyTabWidget::SetMode(const Mode mode) {
}
#endif
if ((previous_mode == Mode::IconOnlyTabs || previous_mode == Mode::IconsSidebar) &&
(mode != Mode::IconOnlyTabs && mode != Mode::IconsSidebar)) {
if ((previous_mode == Mode::IconOnlyTabs || previous_mode == Mode::IconsSidebar) && (mode != Mode::IconOnlyTabs && mode != Mode::IconsSidebar)) {
for (int i = 0; i < count(); ++i) {
tabBar()->setTabText(i, tabBar()->tabData(i).value<FancyTabData*>()->label());
tabBar()->setTabToolTip(i, ""_L1);
}
}
else if ((previous_mode != Mode::IconOnlyTabs && previous_mode != Mode::IconsSidebar) &&
(mode == Mode::IconOnlyTabs || mode == Mode::IconsSidebar)) {
else if ((previous_mode != Mode::IconOnlyTabs && previous_mode != Mode::IconsSidebar) && (mode == Mode::IconOnlyTabs || mode == Mode::IconsSidebar)) {
for (int i = 0; i < count(); ++i) {
tabBar()->setTabText(i, ""_L1);
tabBar()->setTabToolTip(i, tabBar()->tabData(i).value<FancyTabData*>()->label());
@@ -233,6 +228,28 @@ void FancyTabWidget::SetMode(const Mode mode) {
}
int FancyTabWidget::InsertTab(const int preffered_index, FancyTabData *tab) {
const int actual_index = InsertTab(preffered_index, tab->page(), tab->icon(), QString());
tabBar()->setTabData(actual_index, QVariant::fromValue<FancyTabData*>(tab));
if (mode_ == Mode::IconOnlyTabs || mode_ == Mode::IconsSidebar) {
for (int i = 0; i < count(); ++i) {
tabBar()->setTabText(i, ""_L1);
tabBar()->setTabToolTip(i, tabBar()->tabData(i).value<FancyTabData*>()->label());
}
}
else {
for (int i = 0; i < count(); ++i) {
tabBar()->setTabText(i, tabBar()->tabData(i).value<FancyTabData*>()->label());
tabBar()->setTabToolTip(i, ""_L1);
}
}
return actual_index;
}
int FancyTabWidget::InsertTab(const int idx, QWidget *page, const QIcon &icon, const QString &label) {
return QTabWidget::insertTab(idx, page, icon, label);
}

View File

@@ -57,6 +57,7 @@ class FancyTabWidget : public QTabWidget {
int iconsize_largesidebar() const { return iconsize_largesidebar_; }
void AddTab(QWidget *widget_view, const QString &name, const QIcon &icon, const QString &label);
bool EnableTab(QWidget *widget_view);
bool DisableTab(QWidget *widget_view);
@@ -64,7 +65,9 @@ class FancyTabWidget : public QTabWidget {
void SaveSettings(const QString &settings_group);
void ReloadSettings();
int InsertTab(const int preffered_index, FancyTabData *tab);
int InsertTab(const int idx, QWidget *page, const QIcon &icon, const QString &label);
void AddSpacer();
void AddBottomWidget(QWidget *widget_view);
void SetBackgroundPixmap(const QPixmap &pixmap);