QT:两个布局添加相同的小部件

时间:2012-09-28 23:53:00

标签: qt layout widget hide

在Qt中:我创建了一个widget-ui类,我希望在两个单独的基本窗口小部件(或窗口)中使窗口小部件显示在两个不同的布局中。所以我想:

widget_based_class* inside = new widget_based_class(base_widget1);

QHBoxLayout *lay1=new QHBoxLayout(base_widget1);
base_widget->setLayout(lay1);
lay1->addWidget(inside);
base_widget1.show();

-------------------------------
base_widget1.hide();
QHBoxLayout *lay2=new QHBoxLayout(base_widget2);
base_widget->setLayout(lay2);
lay2->addWidget(inside);
base_widget2.show();

我是如何实现这一目标的? (我的程序更复杂,我没看到代码工作。) 坦克你。

3 个答案:

答案 0 :(得分:4)

QWidget只有一个父窗口小部件,并且该父窗口只有一个几何体(位置和大小)。每次调用QLayout :: addWidget()都会将该窗口小部件重新显示给窗口小部件,并安装布局。

您对setLayout的第二次调用将无法按预期工作,因为您必须在设置新布局管理器之前删除它:

delete base_widget->layout();
base_widget->setLayout(lay2);

如果base_widget还没有布局管理器,布局管理器lay2将被简单地重新定位。

答案 1 :(得分:0)

如果该窗口小部件永远不会在屏幕上显示两次,那么我不明白为什么您不能通过addWidget / removeWidget对其进行重设。

在OP中,父窗口小部件/窗口总是在显示另一个窗口之前被隐藏。 addWidget被即时调用。我们还应该即时调用removeWidget。应该可以移动小部件。

widget_based_class* inside = new widget_based_class(base_widget1);

QHBoxLayout *lay1=new QHBoxLayout(base_widget1);
base_widget->setLayout(lay1);
lay2->removeWidget(inside); // remove widget from other layout
lay1->addWidget(inside);    // add widget to this layout
base_widget1.show();

-------------------------------
base_widget1.hide();
QHBoxLayout *lay2=new QHBoxLayout(base_widget2);
base_widget->setLayout(lay2);
lay1->removeWidget(inside); //remove widget from other layout
lay2->addWidget(inside);    // add widget to this layout
base_widget2.show();

答案 2 :(得分:-2)

制作一个小部件并在每个布局中使用指针?