尝试将 QStackedLayout 与 QStacked:: StackAll 一起使用,但它无法正常工作

Trying to use QStackedLayout with QStacked:: StackAll, but it works incorrectly

提问人:GendOS 提问时间:2/4/2021 最后编辑:eyllanescGendOS 更新时间:2/5/2021 访问量:488

问:

我正在尝试将 QStackedLayout 与 QStacked:: StackAll 一起使用,以同时显示两个小部件。但是,即使我放置了透明背景,它也会突破主背景下方的小部件。

蓝色圆圈旁边的白色背景是位于另一个小部件上的按钮:
The white background next to the blue circle is a button that sits on another widget

这是我的主窗口.cpp代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include "mywidget.h"

#include <QStackedLayout>
#include <QDebug>
#include <QComboBox>
#include <QPushButton>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{

    ui->setupUi(this);

    setAttribute(Qt::WA_TranslucentBackground);

    MyWidget* wg = new MyWidget(this);

    FirstWidget* fw = new FirstWidget;
    SecondWidget* sw = new SecondWidget;

    QStackedLayout* stack = new QStackedLayout;
    stack->setStackingMode(QStackedLayout::StackAll);

    stack->addWidget(sw);
    stack->addWidget(fw);

    wg->setLayout(stack);

    QPushButton* btn = new QPushButton(this);
    btn->setFixedSize(100, 20);


    btn->setText("Check");
    connect(btn, &QPushButton::clicked, [stack]()
    {
       if (stack->currentIndex() == 0)
       {
           stack->setCurrentIndex(1);
           qDebug() << "fw";
       }
       else
       {
           stack->setCurrentIndex(0);
           qDebug() << "sw";
       }

    });
}

MainWindow::~MainWindow()
{
    delete ui;
}
夸脱

评论

0赞 Minh 2/5/2021
你能详细说明一下哪里出了问题吗?“它突破了主小部件下的小部件”不是很清楚。您的最终目标是什么?

答:

0赞 Andrei Andreev 2/5/2021 #1

您必须为堆栈中最顶层的小部件 SecondWidget 或 FirstWidget 制作透明背景,但您为 MainWindow 调用 setAttribute(Qt::WA_TranslucentBackground)。您也可以尝试 sw->setStyleSheet(“background : transparent;”)。