Qt浅谈之右下角浮出界面

2024-03-11 10:18

本文主要是介绍Qt浅谈之右下角浮出界面,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、简介

 

       csdn博客上看到了一个比较简单的动画,类似windows下右下角的弹出广告界面。故记录在此,以便查阅。

 

二、详解

1、部分代码

(1)rightpop.h

#ifndef RIGHTPOP_H
#define RIGHTPOP_H#include "epushbutton.h"
#include <QtGui>class RightPop : public QWidget
{Q_OBJECTpublic:RightPop(QWidget *parent = 0);~RightPop();void showMessage();protected:void paintEvent(QPaintEvent *event);private slots:void onMove();void onStay();void onClose();void onExit();private:QPixmap backGroundPix;EPushButton *closeButton;QTimer *showTimer;QTimer *stayTimer;QTimer *closeTimer;QPoint point;double transparentPercent;int desktopHeight;
};#endif // RIGHTPOP_H

(2)rightpop.cpp

#include "rightpop.h"RightPop::RightPop(QWidget *parent): QWidget(parent, Qt::FramelessWindowHint| Qt::ToolTip), transparentPercent(1.0)
{resize(300, 200);backGroundPix.load(":/background.png");backGroundPix = backGroundPix.scaled(width(), height(), Qt::KeepAspectRatio, Qt::SmoothTransformation);closeButton = new EPushButton(this);closeButton->setPixName(":/close");closeButton->setToolTip(tr("close"));closeButton->move(width() - 27, 0);connect(closeButton, SIGNAL(clicked()), this, SLOT(onExit()));showTimer = new QTimer(this);showTimer->setInterval(5);stayTimer = new QTimer(this);stayTimer->setInterval(5000);closeTimer = new QTimer(this);closeTimer->setInterval(5);connect(showTimer, SIGNAL(timeout()), this, SLOT(onMove()));connect(stayTimer, SIGNAL(timeout()), this, SLOT(onStay()));connect(closeTimer, SIGNAL(timeout()), this, SLOT(onClose()));showMessage();
}RightPop::~RightPop()
{}void RightPop::showMessage()
{QRect rect = QApplication::desktop()->availableGeometry();point.setX(rect.width() - width());point.setY(rect.height() + 50);desktopHeight = rect.height() + 50;move(point.x(), point.y());showTimer->start();
}void RightPop::onMove()
{desktopHeight--;move(point.x(), desktopHeight);if (desktopHeight <= point.y() - 200) {showTimer->stop();stayTimer->start();}
}void RightPop::onStay()
{stayTimer->stop();closeTimer->start();
}void RightPop::onClose()
{
//    transparentPercent -= 0.1;
//    qDebug() << transparentPercent;
//    if (transparentPercent <= 0.0) {
//        closeTimer->stop();
//        onExit();
//    }
//    else {
//        setWindowOpacity(transparentPercent);
//    }desktopHeight++;move(point.x(), desktopHeight);if (desktopHeight >= point.y()) {closeTimer->stop();onExit();}
}void RightPop::onExit()
{exit(0);
}void RightPop::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.drawPixmap(0, 0, width(), height(), backGroundPix);painter.setFont(QFont("arial", 10, QFont::Bold));painter.setPen(QColor("#FFFFFF"));painter.setBrush(QColor("#FFFFFF"));painter.drawText(QRectF(5, 5, 100, 35), tr("Happy New Year"));painter.drawRect(QRectF(0, 30, width(), height() - 30));QWidget::paintEvent(event);
}

三、总结

(1)在centos下setWindowOpacity(0)设置透明度没有效果,故采用弹入弹出界面。
(2)上述代码采用定时器的启动和关闭来简单实现动画的功能。
(3)完整的工程代码已上传到CSDN:http://download.csdn.net/detail/taiyang1987912/9422290。

这篇关于Qt浅谈之右下角浮出界面的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/797517

相关文章

VS配置好Qt环境之后但无法打开ui界面的问题解决

《VS配置好Qt环境之后但无法打开ui界面的问题解决》本文主要介绍了VS配置好Qt环境之后但无法打开ui界面的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目UKeLvb录找到Qt安装目录中designer.UKeLvBexe的路径找到vs中的解决方案资源

Qt之QMessageBox的具体使用

《Qt之QMessageBox的具体使用》本文介绍Qt中QMessageBox类的使用,用于弹出提示、警告、错误等模态对话框,具有一定的参考价值,感兴趣的可以了解一下... 目录1.引言2.简单介绍3.常见函数4.按钮类型(QMessage::StandardButton)5.分步骤实现弹窗6.总结1.引言

Qt中Qfile类的使用

《Qt中Qfile类的使用》很多应用程序都具备操作文件的能力,包括对文件进行写入和读取,创建和删除文件,本文主要介绍了Qt中Qfile类的使用,具有一定的参考价值,感兴趣的可以了解一下... 目录1.引言2.QFile文件操作3.演示示例3.1实验一3.2实验二【演示 QFile 读写二进制文件的过程】4.

浅谈Redis Key 命名规范文档

《浅谈RedisKey命名规范文档》本文介绍了Redis键名命名规范,包括命名格式、具体规范、数据类型扩展命名、时间敏感型键名、规范总结以及实际应用示例,感兴趣的可以了解一下... 目录1. 命名格式格式模板:示例:2. 具体规范2.1 小写命名2.2 使用冒号分隔层级2.3 标识符命名3. 数据类型扩展命

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

Qt中QGroupBox控件的实现

《Qt中QGroupBox控件的实现》QGroupBox是Qt框架中一个非常有用的控件,它主要用于组织和管理一组相关的控件,本文主要介绍了Qt中QGroupBox控件的实现,具有一定的参考价值,感兴趣... 目录引言一、基本属性二、常用方法2.1 构造函数 2.2 设置标题2.3 设置复选框模式2.4 是否

QT进行CSV文件初始化与读写操作

《QT进行CSV文件初始化与读写操作》这篇文章主要为大家详细介绍了在QT环境中如何进行CSV文件的初始化、写入和读取操作,本文为大家整理了相关的操作的多种方法,希望对大家有所帮助... 目录前言一、CSV文件初始化二、CSV写入三、CSV读取四、QT 逐行读取csv文件五、Qt如何将数据保存成CSV文件前言

Qt中QUndoView控件的具体使用

《Qt中QUndoView控件的具体使用》QUndoView是Qt框架中用于可视化显示QUndoStack内容的控件,本文主要介绍了Qt中QUndoView控件的具体使用,具有一定的参考价值,感兴趣的... 目录引言一、QUndoView 的用途二、工作原理三、 如何与 QUnDOStack 配合使用四、自

Qt spdlog日志模块的使用详解

《Qtspdlog日志模块的使用详解》在Qt应用程序开发中,良好的日志系统至关重要,本文将介绍如何使用spdlog1.5.0创建满足以下要求的日志系统,感兴趣的朋友一起看看吧... 目录版本摘要例子logmanager.cpp文件main.cpp文件版本spdlog版本:1.5.0采用1.5.0版本主要