• 6231阅读
  • 0回复

Qt的QTabWidget中的BUG [复制链接]

上一主题 下一主题
离线notton
 

只看楼主 倒序阅读 楼主  发表于: 2010-11-25
在开发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就可以保持一致了.


用图说明一下现象:
如图中状态时关闭窗口,再次打开时,Tabbar中的Effect显示是对应,但StackWidget却显示成了Subtigle对应的stackWidget.


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/notton/archive/2010/11/25/6033861.aspx
[ 此帖被notton在2010-11-25 09:35重新编辑 ]
c++ dev
快速回复
限100 字节
 
上一个 下一个