更改QTabWidget中的小部件

时间:2014-02-16 01:37:39

标签: qt

我无法在运行时找到替换QWidget中特定标签的QTabWidget的方法。我可以使用addTab然后使用setCurrentWidget,但是如果我只想在标签索引1处设置QWidget而不添加新标签呢?

2 个答案:

答案 0 :(得分:4)

一种方法是在选项卡中使用父QWidget作为主QWidget,并在需要更改选项卡内容时更改其子项。

从技术上讲,您不会更改标签本身的QWidget,而只是标签中主QWidget的第一个孩子。

例如:

QTabWidget* myTabWidget = new QTabWidget();
QWidget* tab1 = new QWidget();
QWidget* tab1Contents = new QWidget( tab1 );

// [1] Setup the first tab.
myTabWidget.addTab( tab1, "1st Tab" );

// [3] If you now want to remove the original contents 
// and replace with something new.
delete tab1Contents;
QWidget* tab1NewContents = new QWidget( tab1 );

当然,您可以向tab1tab1Contentstab1NewContents添加布局,确保标签内容看起来不错!

答案 1 :(得分:1)

此实用程序功能:

void replaceTab(QTabWidget * tabs, int index,
                QWidget * replacement, const QString & label = QString())
{
  Q_ASSERT(tabs && tabs->count() > index)
  tabs->removeTab(index);
  if (replacement) tabs->insertTab(index, replacement, label);
}