Qt实现类似ToDesk顶层窗口 & 不规则按钮

先看效果:

在进行多进程开发时,可能会遇到需要进行全局弹窗的需求。

因为平时会使用ToDesk进行远程桌面控制,在电脑被控时,ToDesk会在右下角进行一个顶层窗口的提示,效果如下:

 其实要实现顶层窗口,最关键的是设置窗口属性:

setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);

同时一般也不太需要Windows状态栏的图标,我们可以这样,加一个Qt::Tool上去:

setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | Qt::Tool);

动画效果的使用,会使程序的呈现更加奈斯:

// 初始化
{
    moveAnimation_ = new QPropertyAnimation(this,"pos",this);
    QScreen *primaryScreen = QGuiApplication::primaryScreen();
    if(primaryScreen==nullptr) { return; }
    geometry=primaryScreen->availableGeometry();
    this->move(geometry.width()-300-pix_right_.width(),geometry.height()-200);
    setFixedSize(300+pix_right_.width(), 200);
}

// 调用
{
    QString imageName = is_expanded_ ? "right" : "left";
    QPoint showPoint = QPoint(geometry.width()-300-pix_right_.width(),geometry.height()-200);
    QPoint hidePoint = QPoint(geometry.width()-pix_right_.width(),geometry.height()-200);
    if(is_expanded_) {
        startAnimation(showPoint, hidePoint);
        btn_->setMask(pix_right_.mask());
    } else {
        startAnimation(hidePoint, showPoint);
        btn_->setMask(pix_left_.mask());
    }
}

// target目标点,oldpos起始点
void AssistDlg::startAnimation(QPoint target, QPoint oldpos)
{
    moveAnimation_->setDuration(300);
    moveAnimation_->setStartValue(oldpos);
    moveAnimation_->setEndValue(target);
    moveAnimation_->setEasingCurve(QEasingCurve::OutCubic);
    moveAnimation_->start();
}

不规则按钮的主要代码如下:

    btn_ = new QPushButton(this);
    btn_->setFixedSize(pix_right_.size());
    btn_->setMask(pix_right_.mask());
    btn_->setStyleSheet("background-image: url(:/images/right.png)");
    btn_->setStyleSheet("QPushButton{"
                        "border-image:url(:/images/right.png)}"
                        );

最近更新

  1. TCP协议是安全的吗?

    2024-02-06 06:04:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-06 06:04:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-06 06:04:04       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-06 06:04:04       20 阅读

热门阅读

  1. C语言-4

    C语言-4

    2024-02-06 06:04:04      27 阅读
  2. Days 22 ElfBoard 基于QT的智慧家庭控制中心

    2024-02-06 06:04:04       24 阅读
  3. 服务器托管有哪些好处?

    2024-02-06 06:04:04       26 阅读
  4. SpringBoot过滤器获取请求的参数

    2024-02-06 06:04:04       31 阅读
  5. Centos 7系统安装proftpd-1.3.8过程

    2024-02-06 06:04:04       27 阅读
  6. 【无标题】

    2024-02-06 06:04:04       28 阅读
  7. 关闭Ubuntu 默认开启的自动安全更新

    2024-02-06 06:04:04       24 阅读
  8. GPT-4是什么?如何使用GPT-4?

    2024-02-06 06:04:04       29 阅读
  9. C#面向对象程序设计

    2024-02-06 06:04:04       34 阅读
  10. Vue 实现动态路由

    2024-02-06 06:04:04       28 阅读
  11. 二进制可执行文件的常见后缀

    2024-02-06 06:04:04       32 阅读
  12. Days 20 ElfBoard 板 FFmpeg移植

    2024-02-06 06:04:04       32 阅读