Qt悬浮窗

想做类似gnucash中的悬浮效果


费劲周折,尝试了QDockWidget的setFloting(),也尝试了QMdiArea,效果都不理想。

搜到一个方法比较管用,发个链接备忘

paip.提升用户体验---c++ qt 悬浮窗实现

主要代码如下

    setWindowFlags(Qt::Tool | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
    setAttribute(Qt::WA_TranslucentBackground, true);
悬浮窗要用到show(),并且为了和主界面保持一致,我在主界面的paintEvent()中调用了悬浮窗的repaint(),让悬浮窗根据主界面的geometry信息绘制。

悬浮窗的paintEvent主要代码如下

    int x = m_pMainWindow->x() + MARGIN_LEFT;
    int y = m_pMainWindow->y() - MARGIN_BOTTOM;
    y += m_pMainWindow->height() - FIXED_HEIGHT;
    QStatusBar* sb = m_pMainWindow->statusBar(); // 有状态栏时上移
    if(sb && sb->isEnabled() && sb->isVisible())
        y -= sb->height();
    int w = m_pMainWindow->width() - MARGIN_LEFT - MARGIN_RIGHT;
    int h = FIXED_HEIGHT;
    this->setGeometry(x, y, w, h);

    QWidget::paintEvent(e);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值