QT笔记——在一个窗口上显示另外一个透明窗口

在一个父窗口上 的某个位置,显示 一个透明窗口 (窗口透明,但是控件不透明)

一开始试了很多种的透明方式 ,有些可以,有些不可以,会有黑边背景。
透明的 几种方式
在子窗口 的 构造函数中写上

SubWidget.cpp

//设置窗口透明
setAttribute(Qt::WA_TranslucentBackground);
//设置无边窗体   并且为 tool的模式
setWindowFlags(Qt::FramelessWindowHint | Qt::Tool);

在父窗口的 构造函数中写上 显示

MainWidget.cpp

new出 子窗口   然后展示出来  ,移动到父窗口的某个位置(位置根据自己需要定)
SubWidget * widget = new SubWidget (this);
widget->move(300,400);
widget->show();

这样虽然可以实现 让子窗口透明 ,而且位置显示正确,但是我们发现还是有问题的,
因为当我们移动父窗口的 时候,子窗口没有移动,这时候,我们就需要实时改变位置(根据父窗口的位置)

我们可以在paintEvent事件中 获取窗口的位置 ,然后 发送位置 ,让子窗口不断的刷新移动

void myLabel::paintEvent(QPaintEvent* event)
{
	Q_UNSED(event);
	update();
	widget->move(this->mapToGlobal(QPoint(this->x()+ 300,this->y() + 400));  
}

参考博客:
在另外一个窗口上 显示 子窗口

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt中,可以使用QStackedWidget控件来实现在同一个窗口显示不同的界面。QStackedWidget是一个可以堆叠多个窗口部件的容器,只有当前窗口部件是可见的。 具体实现步骤如下: 1. 在Qt Designer中创建不同的界面,并将它们保存为.ui文件。 2. 创建一个窗口,并在主窗口中添加一个QStackedWidget控件。 3. 在主窗口的构造函数中,将每个.ui文件中的窗口部件加载到QStackedWidget控件中。 4. 在主窗口中添加按钮,并为每个按钮设置一个槽函数,用于切换到对应的界面。 5. 在槽函数中,使用setCurrentIndex()函数将QStackedWidget控件中当前显示窗口部件切换到对应的界面。 示例代码如下: ``` // MainWindow.cpp #include "MainWindow.h" #include "ui_MainWindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); // 加载不同的界面 page1 = new Page1(); page2 = new Page2(); // 将界面添加到QStackedWidget控件中 ui->stackedWidget->addWidget(page1); ui->stackedWidget->addWidget(page2); // 连接按钮的槽函数 connect(ui->btnPage1, SIGNAL(clicked()), this, SLOT(showPage1())); connect(ui->btnPage2, SIGNAL(clicked()), this, SLOT(showPage2())); } MainWindow::~MainWindow() { delete ui; } void MainWindow::showPage1() { // 切换到第一个界面 ui->stackedWidget->setCurrentWidget(page1); } void MainWindow::showPage2() { // 切换到第二个界面 ui->stackedWidget->setCurrentWidget(page2); } ``` 其中,MainWindow是主窗口的类名,Page1和Page2是两个不同界面的类名。在Qt Designer中创建的界面需要使用uic工具进行转换,转换后的类名格式为ui_XXX.h。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值