2009-12-12 137 views
3

我有一个选项卡式小部件,并且所有选项卡具有相同的布局,因此我想在用户更改选项卡时移动小部件。这将是什么代码。我已经尝试了一些东西,但它似乎总是缺少一件事。以下只能工作一次,但不能从当前选项卡更改时调用的插槽中获得: txDiag_1是一个定制小部件,它占据整个选项卡区域 tabList.at(i)是对tabWidget内部选项卡的引用,而movingHlayout是水平布局。如何将小部件从一个选项卡移动到另一个选项卡并保持布局

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

我想,也许我应该先删除旧的组件,但是我想我可能只是破坏旧的布局,并创建一个新的每次但它仍然没有工作。

回答

1

好吧。

基本上你需要:

1.去除您希望从布局
2.删除布局
3.创建使用与父参数构造一个新的布局移动微件(父是一个在tabWidget你希望你的Widget移动到标签)的
4.增加你想移动到布局中的小部件

layoutPointer->removeWidget(ui.WidgetName);
delete layoutPointer;
layoutPointer= new QHBoxLayout(destTabName);
layoutPointer->addWidget(WidgetName);

PS确保你的tabWidget只有一个布局,并使用你删除的指针,并重新创建其指向的布局,否则它将无法工作。

6

为了澄清一下,您有一组控制小部件的选项卡,当用户更改选项卡时会稍微改变,并且您希望重用该小部件而不是为每个选项卡创建一个选项卡?

如果是这样,请添加一个QTabBar并拥有一个小部件。然后将tabbar上的currentChanged信号连接到您自己的插槽,以便用户更改当前选项卡时更新小部件。

+0

好的,谢谢我会尽力。很抱歉,长时间的回应,长时间的结束:) – 2009-12-14 18:27:52

2

燕的回答很好,但我发现很难理解。我希望这个答案能够详细阐述解决方案。

目标是在n截然不同的QTabWidget页面上共享QWidget的单个实例。

每一页都持有一个小工具,需要在QTabWidget所有可用的面积。如果您想在单个页面上使用多个用户界面元素,请将它们放在一个小部件中,就像我在下面所做的一样。因此,请创建您的自定义QWidget。这里是我的

enter image description here

enter image description here

这里是我动态创建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))); 
} 

设置,当你创建它们,如上面看到的每个选项卡的布局。这保持了“每个页面小部件总是具有布局”的不变性。

这里是插槽:

void MyWindow::onTabChanged(int index) 
{ 
    QLayout * layout = ui->tabWidget->widget(index)->layout(); 
    layout->removeWidget(ui->tabWidget->widget(index)); 
    delete layout; 
    layout = new QHBoxLayout; 
    layout->addWidget(ui->flowTabWidget); 
    ui->tabWidget->widget(index)->setLayout(layout); 
} 

在我们得到的页面控件的布局插槽。然后我们从它自己的布局中移除页面小部件。接下来我们删除该布局。我们创建一个新的布局。我们将我们的自定义小部件添加到布局。最后,我们在页面小部件上设置布局。

当你完成,你的单QWidget实例将在所有选项卡使用,将调整/伸展适当由于其父布局

enter image description here

现在非常感谢你。

相关问题