2013-08-23 1 views
2

Предполагая, что у меня есть QTabWidget, который содержит 5 суб-вкладок. Теперь я хочу, чтобы показать/скрыть вложенную вкладку в одном из 5 подгрупп вкладок следующий кодПоказать/скрыть суб-вкладку на QTabWidget

ui->twListTabs->widget(0)->hide();   // Hide first sub-tab 

Но это не работает для меня. У вас есть решения?

Спасибо!

ответ

6

У вас есть только возможность использовать:

void QTabWidget::removeTab(int index) 

Вам нужно хранить указатель на QWidget на вкладке, так что вы можете позже вставить его.

Вы можете, например. сделайте что-нибудь вроде:

class TabWidget : public QTabWidget 
{ 
    Q_OBJECT 

     enum tabwidgets {tabwidget1,tabwidget2,...,number_of_tabwidgets}; 
     QWidget* widgets_[number_of_tabwidgets]; 
    public: 
     TabWidget(QWidget* parent=0) 
     : QWidget(parent) 
     { 
     for(int i(0);i<number_of_tabwidgets;++i) 
    { 
     switch(i) 
     { 
      case tabwidget1: 
       insertTab(i,widgets_[i]=new TabWidget1,QString::number(i)); 
      .... 
     } 
    } 
     } 
}; 
+0

Если у вас есть вкладка в дизайнере пользовательского интерфейса Qt Creator, нет необходимости в такой сложности. Просто используйте 'removeTab', а затем, чтобы добавить его обратно, просто используйте функцию« findChild », чтобы потянуть вкладку (она все еще там, управляемая объектом пользовательского интерфейса, даже после удаления из виджета вкладки). См. Комментарий от 12 августа 2011 года здесь: http://www.qtcentre.org/threads/16505-Hiding-a-tab-in-QTabBar-widget?p=200059#post200059 (и это работает для меня, через 6 лет). –

+0

@ Dan Nissenbaum да, это вопрос стиля кодирования. Вы видите много кода вокруг хранения указателей на различные элементы управления gui, но я также начал использовать findChild больше. Также обратный вызов лямбда, доступный на C++ 11, уменьшает необходимость хранения указателей. – user2672165