当前位置: 首页 > article >正文

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)}"
                        );

http://www.kler.cn/a/226811.html

相关文章:

  • 【Java程序设计】【C00207】基于(JavaWeb+SSM)的宠物领养管理系统(论文+PPT)
  • 前端面试题-JavaScriptl原型,原型链?有什么特点?(2024.2.2)
  • 题目: 有1234个数字, 组成多个互不相同且无重复数字的三位数? 都是多少?
  • 【大数据技术攻关专题】「Apache-Flink零基础入门」手把手+零基础带你玩转大数据流式处理引擎Flink(基础加强+运行原理)
  • 代码随想录算法训练营第二十四天|● 理论基础 ● 77. 组合
  • oracle数据库慢查询SQL
  • 【Delphi】IDE 工具栏错乱恢复
  • 软件工程知识梳理0-概述
  • jQuery前段开发--星级评价和图形跟随指针移动
  • 【报错记录】mybatis映射对应的类没有无参构造引发的问题
  • NUXTJS安装始终报错无法正常运行问题解决
  • T113-Pro的buildroot添加gdisk ( GPT disks )出现gptfdisk needs a toolchain w/ C++的解决方法
  • 业务流程自动化平台在制造业应用案例,助力业务自动化、智能化
  • QSlider使用笔记
  • 029 命令行传递参数
  • 云尘 -- 铁三域控
  • 2402d,d的内存库设计
  • Redis核心技术与实战【学习笔记】 - 19.Pika:基于SSD实现大容量“Redis”
  • Oracle分析SQL执行调优
  • 三门问题(Python运算蒙提霍尔问题)