C++ Qt-QVBoxLayout中的重叠标签

C++ Qt-QVBoxLayout中的重叠标签,c++,qt,C++,Qt,我试图使标签在QVBoxLayout中相互重叠,如下所示: this->layout = new QGridLayout; this->layout->addLayout(new QVBoxLayout, 1, 0); for (int j = 0; j < 7; j++) { ClickableLabel *label = new ClickableLabel(); auto stack = this->layout->findChild

我试图使标签在
QVBoxLayout
中相互重叠,如下所示:

this->layout = new QGridLayout;
this->layout->addLayout(new QVBoxLayout, 1, 0);

for (int j = 0; j < 7; j++) {
    ClickableLabel *label = new ClickableLabel();

    auto stack = this->layout->findChildren<QVBoxLayout*>();
    stack[0]->addWidget(label);
    stack[0]->setAlignment(Qt::AlignTop);

    button->setGeometry(10000, 100, 0, 0);
}
this->layout=新建QGridLayout;
此->布局->添加布局(新的QVBoxLayout,1,0);
对于(int j=0;j<7;j++){
ClickableLabel*标签=新的ClickableLabel();
自动堆叠=this->layout->findChildren();
堆栈[0]->addWidget(标签);
堆栈[0]->setAlignment(Qt::AlignTop);
按钮->设置几何图形(10000、100、0、0);
}

现在,
setGeometry
什么也不做。所以我的问题是:我能在
QVBoxLayout
中实现重叠标签吗?

不,你不能在
QVBoxLayout

中实现重叠标签吗?除了gridLayout(我试过了,可能是因为最大窗口大小有问题)没有-除了其他事情之外,布局的目的是不允许重叠-布局以某种好的方式布局控件。只是不要使用布局-手动布局控件。但它有严重的缺点(例如,在调整窗口大小的情况下-如果您在代码中没有对此事件做出响应,控件将被冻结在其位置,并且在(小)窗口之外时可能不可见)。您必须首先创建控件(如您所做的),然后使用
setGeometry()
方法进行设置(正如您在代码中使用
按钮时所做的那样,但不能使用零表示宽度和高度)。完全忽略创建和添加布局的命令。因此您需要其他东西-绘图。使用
qpaint
类作为基类-Qt附带了许多示例。