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

时间:2021-02-04 15:11:41

标签: qt

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

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

这是我的 mainwindow.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;
}

1 个答案:

答案 0 :(得分:0)

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