2014-02-16 30 views
2

我無法找到在運行時替換QTabWidget中特定選項卡的QWidget的方法。我可以使用addTab,然後setCurrentWidget,但是如果我想僅在選項卡索引1處設置QWidget而不添加新選項卡,該怎麼辦?更改QTabWidget中的小部件

回答

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); 

當然你也可以添加布局,tab1tab1Contents,並tab1NewContents確保您的標籤內容好看!

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); 
} 
+1

如果你有超過1個選項卡,並在使用該功能在當前標籤更換部件,然後另一個選項卡成爲當前選項卡。這可以通過'tabs-> currentIndex()'獲取當前索引並且之後用'tabs-> setCurrentIndex'來設置。 – nwp