2

在 Qt 中:我创建了一个小部件-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();

我怎样才能做到这一点?(我的程序更复杂,我没有看到代码工作。)坦克你。

4

3 回答 3

4

一个 QWidget 只有一个父窗口小部件,并且在该父窗口中只有一个几何图形(位置和大小)。每次调用 QLayout::addWidget() 都会将该小部件重新设置为小部件,布局已安装。

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

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

如果 base_widget 还没有布局管理器,则布局管理器lay2 将简单地重新设置父级。

于 2012-09-29T06:29:52.773 回答
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();
于 2020-10-08T18:40:24.787 回答
-2

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

于 2012-09-29T03:02:39.943 回答