我正在尝试将 QStackedLayout 与 QStacked::StackAll 一起使用,以同时显示两个小部件。但是,即使我放了一个透明的背景,它也会突破主窗口下的小部件。
这是我的 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;
}
答案 0 :(得分:0)
您必须为堆栈 SecondWidget 或 FirstWidget 中最顶层的小部件制作透明背景,但您为 MainWindow 调用 setAttribute(Qt::WA_TranslucentBackground)。你也可以试试 sw->setStyleSheet("background : transparent;").