Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt:两个不同布局中的相同小部件_Qt_Layout - Fatal编程技术网

Qt:两个不同布局中的相同小部件

Qt:两个不同布局中的相同小部件,qt,layout,Qt,Layout,我试图实现的是一个小部件可以存在于两种不同的布局中,在本例中是QHBoxLayout和QVBoxLayout。我正在实现一个系统,当设备的屏幕方向发生变化时,它会在两种布局之间动态切换 目前,我正在创建一个名为MyWidget的复杂复合小部件,并将其添加到两个不同的布局中: MyWidget *wgt = new QWidget(); QVBoxLayout vlayout; QHBoxLayout hlayout; vlayout->addWidget(wgt); hlayout-&g

我试图实现的是一个小部件可以存在于两种不同的布局中,在本例中是QHBoxLayout和QVBoxLayout。我正在实现一个系统,当设备的屏幕方向发生变化时,它会在两种布局之间动态切换

目前,我正在创建一个名为MyWidget的复杂复合小部件,并将其添加到两个不同的布局中:

MyWidget *wgt = new QWidget();
QVBoxLayout vlayout;
QHBoxLayout hlayout;

vlayout->addWidget(wgt);
hlayout->addWidget(wgt);
现在假设这两个布局都位于“根”布局中,并且此根布局可以调整为比高更宽的“横向”模式和比宽更高的“纵向”模式

MyWidget仅在添加到的第一个布局中正确显示,当切换布局时,它会显示所有错误或根本不显示


我不知道我在这里是否有意义,但这是我的问题。也许当开关事件被调用时,所有子窗口小部件和布局都应该调整大小,这样看起来总是正确的。唯一的问题是我不知道怎么做。

这不是特别容易做到,但却是可能的

首先,我建议您实际创建两个不同的小部件,一个用于垂直,一个用于水平,并以这种方式进行管理。如果源数据与UI类正确地分离,那么您应该能够不费吹灰之力地这样做,但会产生一些内存开销

当您需要更改屏幕上的排列时,一种方法是完全从一个布局添加到另一个布局,并更改添加到小部件的布局。这将导致以不同的方式绘制相同的小部件


一种不同的、更复杂的处理方法(尽管可能更有效)是让它根据方向的改变来处理重新排列的小部件。

这不是改变布局的一般解决方案,但在您的情况下是一个简单的解决方案:只需改变boxlayout的方向

hlayout->setDirection(QBoxLayout::TopToBottom);
// now your hboxlayout works as vertical layout

hlayout->setDirection(QBoxLayout::LeftToRight);
// and now it is horizontal again

相关问题:我决定编写一个方法,当方向发生变化时自动调用该方法(在删除后)将小部件再次添加到布局中。