Qt 如何将小部件从一个选项卡移动到另一个选项卡并保持布局
我有一个选项卡式小部件,所有的选项卡都有相同的布局,所以我想在用户更改选项卡时移动小部件。这个的代码是什么。我尝试了一些东西,但似乎总是错过一件事。以下操作仅工作一次,但在更改当前选项卡时从调用的插槽中无法执行: txDiag_1是一个定制小部件,占据整个选项卡区域 tabList.at(i)是对tabWidget内选项卡的引用,MovingLayout是水平布局Qt 如何将小部件从一个选项卡移动到另一个选项卡并保持布局,qt,Qt,我有一个选项卡式小部件,所有的选项卡都有相同的布局,所以我想在用户更改选项卡时移动小部件。这个的代码是什么。我尝试了一些东西,但似乎总是错过一件事。以下操作仅工作一次,但在更改当前选项卡时从调用的插槽中无法执行: txDiag_1是一个定制小部件,占据整个选项卡区域 tabList.at(i)是对tabWidget内选项卡的引用,MovingLayout是水平布局 ui.txDiag_1->setParent(tabList.at(1)); movingHlayout->setPar
ui.txDiag_1->setParent(tabList.at(1));
movingHlayout->setParent(tabList.at(1));
movingHlayout->setSpacing(3);
movingHlayout->setMargin(3);
movingHlayout->setObjectName(QString::fromUtf8("movingHlayout"));
movingHlayout->addWidget(ui.txDiag_1);
tabList.at(1)->setLayout(movingHlayout);
我想也许我应该先删除旧的小部件,但我想我可以破坏旧的布局,每次都创建一个新的,但它仍然不起作用。只是澄清一下,您有一组选项卡,可以控制小部件,当用户更改选项卡时,这些选项卡会发生轻微变化,你想重用这个小部件,而不是为每个标签创建一个 如果是这种情况,那么添加一个小部件并拥有一个小部件。然后将选项卡栏上的currentChanged信号连接到您自己的插槽,这样当用户更改当前选项卡时,您就可以更新小部件了。好,明白了 基本上你需要: 1.从布局中删除要移动的小部件
2.删除布局
3.使用带有父参数的构造函数创建新布局(父参数是您希望将小部件移动到的tabWidget的选项卡之一)
4.添加要移动到布局的小部件
layoutPointer->removeWidget(ui.WidgetName)
删除布局指针
layoutPointer=新的QHBoxLayout(destTabName)
layoutPointer->addWidget(WidgetName)代码>
注意,确保tabWidget中只有一个布局,并使用其指针删除并重新创建其指向的布局,否则它将无法工作 严的回答很好,但我觉得很难理解。我希望这一答复将详细说明解决办法
目标是跨n
distinctQTabWidget
页面共享QWidget
的单个实例
每个页面将包含一个小部件,该小部件占用QTabWidget
中的所有可用区域。如果您希望在一个页面上有多个用户界面元素,请将它们放在一个小部件中,就像我在下面所做的那样。因此,创建自定义的QWidget
。这是我的
这里是我动态创建5个选项卡的地方:
void MyWindow::setupTabs()
{
for (int i = 0; i < 5; ++i)
{
QWidget * w = new QWidget;
w->setLayout(new QHBoxLayout);
ui->tabWidget->addTab(w, "Tab " + std::to_string(i));
}
connect(
ui->tabWidget,
SIGNAL(currentChanged(int)),
this,
SLOT(onTabChanged(int)));
}
在插槽中,我们得到页面小部件的布局。然后,我们将页面小部件从它自己的布局中删除。接下来我们删除该布局。我们创建一个新的布局。我们将自定义小部件添加到布局中。最后,我们在页面小部件上设置布局
完成后,您的单个QWidget
实例将在所有选项卡上使用,并且它将根据其父级布局适当调整大小/拉伸
现在非常感谢。setParent足以将小部件从一个容器移动到另一个容器。但是当您更改父项时,小部件是隐藏的,因此,您需要再次显示它
ui.txDiag_1->setParent(tabList.at(1));
ui.txDiag_1->show();
好的,谢谢,我会试试的。抱歉回复太长,周末很长:)
ui.txDiag_1->setParent(tabList.at(1));
ui.txDiag_1->show();