一、Qt自带API
(1)将窗口置顶
void QWidget::raise()
(2)将窗口置底
void QWidget::lower()
(3)将窗口放到某个窗口之下
void QWidget::stackUnder(QWidget *w)
浮动效果:将控件置于容器内,然后容器背景透明,再设置容器置顶,即可实现浮动效果。
二、使用示例
创建一个Widget,两个Lable,Widget作为Label的父类,Lable和父类宽高相等,使用绝对定位布局与左上角对齐,使Label完全重叠,然后通过raise()和lower切换它们在Z轴上的顺序,以实现决定显示谁。
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QWidget>
#include <QLabel>
#include <QTimer>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
QWidget* widget_volumn;
QLabel* label1;
QLabel* label2;
QTimer* timer;
bool x;
public slots:
void slot_timeout();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
widget_volumn = new QWidget;
this->setCentralWidget(widget_volumn);
label1 = new QLabel(widget_volumn);
label1->setStyleSheet("background-color: red;");
label2 = new QLabel(widget_volumn);
label2->setStyleSheet("background-color: green;");
label1->setGeometry(0,0,widget_volumn->width(),widget_volumn->height());
label2->setGeometry(0,0,widget_volumn->width(),widget_volumn->height());
timer = new QTimer;
connect(timer,SIGNAL(timeout()),this,SLOT(slot_timeout()));
timer->start(1000);
x = false;
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::slot_timeout()
{
x = !x;
if(x)
{
label1->raise();
label2->lower();
}
else
{
label1->lower();
label2->raise();
}
}