Qt QTabWidget的BUG(thinkvd开发日志)

  在开发Thinvd视频转换软件时,调用的QTabWidget作为effect界面的布局类。QTabWidget上可设置多个Tabbar, 当我选择了其中一个Tabbar,然后关闭窗口,希望通过setCurrentIndex(或setCurrentWidget)设置能再现关闭前的状态。结果只更改了Tabbar的状态,再没有更新里面的stackedWidget, 也就是说它的tabbar与stackedWidget没有保持一致。个人在做这个之前反复查阅了QTabWidget的文档,能设置它当前界面的也就是setCurrentIndex,setCurrentWidget,如果是点击Tabbar是没有问题的。

 


看了一下QTabWidget::currentChanged ( int index ) 的来源,相关跟踪:

1. connect(d->tabs, SIGNAL(currentChanged(int)),
          this, SLOT(_q_showTab(int)));

2. void QTabWidgetPrivate::_q_showTab(int index)
{
  Q_Q(ImTabWidget);
  if (index < stack->count() && index >= 0)
      stack->setCurrentIndex(index);
  emit q->currentChanged(index);
#ifdef QT3_SUPPORT
  emit q->selected(q->tabText(index));
  emit q->currentChanged(stack->widget(index));
#endif
}

3. 需要调用的setCurrentIndex:
void QTabWidget::setCurrentIndex(int index)
{
    Q_D(ImTabWidget);
    d->tabs->setCurrentIndex(index);
+   if (index < d->stack->count() && index >= 0)
+       d->stack->setCurrentIndex(index);
}

把蓝色部分加到红色部分即可,这样tabbar与stackedWidget就可以保持一致了.

Qt QTabWidget的BUG(thinkvd开发日志)_第1张图片
用图说明一下现象:
如图中状态时关闭窗口,再次打开时,Tabbar中的Effect显示是对应,但StackWidget却显示成了Subtitle对应的stackWidget.

你可能感兴趣的:(Qt QTabWidget的BUG(thinkvd开发日志))