在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();
我是如何实现这一目标的? (我的程序更复杂,我没看到代码工作。) 坦克你。
答案 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)
制作一个小部件并在每个布局中使用指针?