Russian Qt Forum
Ноябрь 27, 2024, 16:53 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTabWidget как заблокировать закрытие вкладки.  (Прочитано 7893 раз)
Mixolap
Гость
« : Май 15, 2009, 21:31 »

Есть QTabWidget. Нужно чтоб пользователь мог закрыть любую вкладку кроме первой.
Записан
samuil
Гость
« Ответ #1 : Май 17, 2009, 11:18 »

ставишь элемент управления, цепляешь на него слот с "removeTab ( int index )" и условия по "index" . или я не понял проблему?
Записан
Mixolap
Гость
« Ответ #2 : Май 17, 2009, 13:46 »

вот как из этого слота запретить закрытие?
ведь он срабатывает уже после того как закрыта вкладка.
Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #3 : Май 17, 2009, 14:08 »

указанный слот будет висеть на всех вкладках и когда будетзакрываться 2-я из 2-х то слот вызовется и заблокирует операцию закрытия для первой, когда добавится аналогичный слот разблокирует.

еще по таймеру можно вызывать (но это хуже)

или уже я что-то не понимаю - задача не то что элементарная - вообще ее нет
Записан
Mixolap
Гость
« Ответ #4 : Май 18, 2009, 12:48 »

Дело в том что могут закрыть первую слева вкладку, а она должна оставаться постоянно... то есть можно закрыть вторую слева, третью, но не первую.
Записан
EhTemka
Гость
« Ответ #5 : Май 18, 2009, 14:39 »

Код
C++ (Qt)
void QTabWidget::tabRemoved ( int index )   [virtual protected]

Переопредели эту функцию и делай там проверку.

Код
C++ (Qt)
void MyTabWidget::tabRemoved ( int index )
{
    if (index != 0) {
          QTabWidget::tabRemoved(index );
    }
}
 
Записан
Mixolap
Гость
« Ответ #6 : Май 18, 2009, 17:01 »

EhTemka - вот не прокатывает такой вариант так как:

void QTabWidget::tabRemoved ( int index )   [virtual protected]
This virtual handler is called after a tab was removed from position index.

функция вызывается после(!) того как таб удален.
То есть ее переопределение все равно позволяет закрыть вкладку...
Записан
Mixolap
Гость
« Ответ #7 : Май 18, 2009, 17:07 »

А вот переопределение
void QTabWidget::removeTab(int index)
помогло в моем случае.... хотя она не virtual.
EhTemka - пасиб за подкинутую идею.
Жаль без наследования не обошлось и крестик на ней все равно висеть остался...
Записан
fuCtor
Гость
« Ответ #8 : Август 30, 2010, 09:46 »

Сори за археологию ) но может пригодится кому-нибудь:
убирание кнопки закрытия с таба => невозможность закрыть таб
Код
C++ (Qt)
QTabBar::ButtonPosition closeSide = (QTabBar::ButtonPosition)tabs_->style()->styleHint(QStyle::SH_TabBar_CloseButtonPosition, 0, this);
tabs_->setTabButton(0, closeSide, 0);
 

Где tabs_ наш QTabBar
Записан
ChromVanadium
Гость
« Ответ #9 : Сентябрь 16, 2010, 14:14 »

У меня так (закрываются все, кроме первой):

на tabWidget правой кнопкой -> перейти к слоту... -> tabCloseRequested(int)
и далее текст слота:

void SomeForm::on_tabWidget_tabCloseRequested(int index)
{
    if (index>0) ui->tabWidget->removeTab(index);
}
« Последнее редактирование: Сентябрь 16, 2010, 14:16 от ChromVanadium » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.1 секунд. Запросов: 23.