Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Mixolap от Май 15, 2009, 21:31



Название: QTabWidget как заблокировать закрытие вкладки.
Отправлено: Mixolap от Май 15, 2009, 21:31
Есть QTabWidget. Нужно чтоб пользователь мог закрыть любую вкладку кроме первой.


Название: Re: QTabWidget как заблокировать закрытие вкладки.
Отправлено: samuil от Май 17, 2009, 11:18
ставишь элемент управления, цепляешь на него слот с "removeTab ( int index )" и условия по "index" . или я не понял проблему?


Название: Re: QTabWidget как заблокировать закрытие вкладки.
Отправлено: Mixolap от Май 17, 2009, 13:46
вот как из этого слота запретить закрытие?
ведь он срабатывает уже после того как закрыта вкладка.


Название: Re: QTabWidget как заблокировать закрытие вкладки.
Отправлено: break от Май 17, 2009, 14:08
указанный слот будет висеть на всех вкладках и когда будетзакрываться 2-я из 2-х то слот вызовется и заблокирует операцию закрытия для первой, когда добавится аналогичный слот разблокирует.

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

или уже я что-то не понимаю - задача не то что элементарная - вообще ее нет


Название: Re: QTabWidget как заблокировать закрытие вкладки.
Отправлено: Mixolap от Май 18, 2009, 12:48
Дело в том что могут закрыть первую слева вкладку, а она должна оставаться постоянно... то есть можно закрыть вторую слева, третью, но не первую.


Название: Re: QTabWidget как заблокировать закрытие вкладки.
Отправлено: EhTemka от Май 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 );
    }
}
 


Название: Re: QTabWidget как заблокировать закрытие вкладки.
Отправлено: Mixolap от Май 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.

функция вызывается после(!) того как таб удален.
То есть ее переопределение все равно позволяет закрыть вкладку...


Название: Re: QTabWidget как заблокировать закрытие вкладки.
Отправлено: Mixolap от Май 18, 2009, 17:07
А вот переопределение
void QTabWidget::removeTab(int index)
помогло в моем случае.... хотя она не virtual.
EhTemka - пасиб за подкинутую идею.
Жаль без наследования не обошлось и крестик на ней все равно висеть остался...


Название: Re: QTabWidget как заблокировать закрытие вкладки.
Отправлено: fuCtor от Август 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


Название: Re: QTabWidget как заблокировать закрытие вкладки.
Отправлено: ChromVanadium от Сентябрь 16, 2010, 14:14
У меня так (закрываются все, кроме первой):

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

void SomeForm::on_tabWidget_tabCloseRequested(int index)
{
    if (index>0) ui->tabWidget->removeTab(index);
}