Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更改QTabWidget中的小部件_Qt - Fatal编程技术网

更改QTabWidget中的小部件

更改QTabWidget中的小部件,qt,Qt,我找不到在运行时替换QTabWidget中特定选项卡的QWidget的方法。我可以使用addTab然后setCurrentWidget,但是如果我只想在选项卡索引1处设置QWidget,而不添加新选项卡,该怎么办?一种方法是使用父QWidget作为选项卡中的主QWidget,并在您想要更改选项卡内容时更改其子项 从技术上讲,您不会更改选项卡本身的QWidget,而只是选项卡中主QWidget的第一个子项 例如: QTabWidget* myTabWidget = new QTabWidget()

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

一种方法是使用父
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 );

当然,您可以将布局添加到
tab1
tab1Contents
tab1NewContents
中,以确保选项卡内容看起来不错

此实用程序函数执行以下操作:

void replaceTab(QTabWidget*tabs,int索引,
QWidget*替换,常量QString&label=QString()
{
Q_断言(制表符和制表符->计数()>索引)
选项卡->移除选项卡(索引);
if(替换)选项卡->插入选项卡(索引、替换、标签);
}

如果您有多个选项卡,并使用此功能替换当前选项卡中的小部件,则另一个选项卡将成为当前选项卡。这可以通过使用
tabs->currentIndex()
获取当前索引,然后使用
tabs->setCurrentIndex
进行设置来解决。