Qt 用一个半透明 顶级窗口B 附着在 窗口A的窗口位置,要保证A在移动的时候B一直在A上方
时间: 2023-12-03 18:05:02 浏览: 84
可以通过以下步骤实现:
1. 创建顶级窗口B,并设置其透明度为半透明。
2. 获取窗口A的位置和大小。
3. 将窗口B的位置设置为窗口A的位置,这样窗口B就会附着在窗口A的上方。
4. 监听窗口A的移动事件,当窗口A移动时,将窗口B的位置设置为窗口A的位置。
以下是示例代码:
```cpp
#include <QtWidgets>
class MainWindow : public QMainWindow
{
public:
MainWindow(QWidget *parent = nullptr) : QMainWindow(parent)
{
// 创建窗口A
QWidget *widgetA = new QWidget(this);
widgetA->setGeometry(100, 100, 300, 200);
widgetA->setStyleSheet("background-color: white;");
// 创建窗口B
QWidget *widgetB = new QWidget(this);
widgetB->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
widgetB->setAttribute(Qt::WA_TranslucentBackground);
widgetB->setGeometry(widgetA->geometry());
widgetB->setStyleSheet("background-color: rgba(255, 255, 255, 128);");
// 监听窗口A的移动事件
connect(widgetA, &QWidget::move, [=]() {
widgetB->move(widgetA->geometry().topLeft());
});
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
```
在上面的代码中,我们创建了一个主窗口,其中包含了两个子窗口widgetA和widgetB。widgetA是我们要附着的窗口,widgetB是半透明的顶级窗口。在widgetA的move事件中,我们将widgetB的位置设置为widgetA的位置,这样就能保证widgetB一直在widgetA上方。
阅读全文