Eticos_CZ 2023-02-27 10:49 采纳率: 75%
浏览 36
已结题

C++/QT窗口置顶与透明问题

问题遇到的现象和发生背景

C++/QT下,窗口置顶导致透明背景无法设置

遇到的现象和发生背景,请写出第一个错误信息

此窗口的底窗口为设置透明窗口,叠加显示主layout,正常启动显示正常,包括无边框、透明背景和阴影。现加入一个窗口置顶按钮,用户通过点击此按钮实现锁定窗口置顶和解锁窗口置顶。现代码如下,当用户点击时窗口正常置顶或取消置顶,但背景变黑,即使再加入背景透明设置代码也无济于事,求解!
如图为正常运行:

img

用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
void CodeBook::on_setTopHint() {
    if (!isWidTop) {
        QWindow* pWin = this->windowHandle();
        pWin->setFlags(Qt::Widget | Qt::WindowStaysOnTopHint);
        this->setAttribute(Qt::WA_TranslucentBackground, true);
        cbWid->setBtnLockState(true);
        qDebug() << u8"CodeBook001: 切换窗口为最顶层";
    }else {
        QWindow* pWin = this->windowHandle();
        pWin->setFlags(Qt::Widget);
        this->setAttribute(Qt::WA_TranslucentBackground, true);
        cbWid->setBtnLockState(false);
        this->show();
        qDebug() << u8"CodeBook001: 取消窗口为最顶层";
    }
    isWidTop = !isWidTop;
}
运行结果及详细报错内容

如图为点击置顶按钮后,窗口置顶但背景不再透明:

img

我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%

尝试通过以下代码解决,但未能达到理想效果:

this->setWindowFlags(Qt::WindowStaysOnTopHint);
this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowMinMaxButtonsHint);
this->setAttribute(Qt::WA_TranslucentBackground, true);
this->show();
我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”
  • 写回答

3条回答 默认 最新

  • Eticos_CZ 2023-02-27 14:48
    关注

    问题解决了,用的是windows库的方法:

    #include <windows.h>
    
    void on_setTopHint() {
        if (!isWidTop) 
            SetWindowPos(HWND(this->winId()), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
        else 
            SetWindowPos(HWND(this->winId()), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
        isWidTop = !isWidTop;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月7日
  • 已采纳回答 2月27日
  • 创建了问题 2月27日

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装