代码是为了碎银几两,浪漫才是至死不渝。实现将屏幕透明,然后花朵在坠落,音乐配上,背景图片在切换,实现程序员的专属浪漫。效果如下。背景不是桌面,而是截了一张图片被Qpainter画出来了。如果把花朵换成透明的,把背景换成甜甜的合照,在配上美好的音乐,再加上甜蜜的告白,高级感就来了。
//生成随机数的两种方法,方法1如下:
QTime randtime;
randtime = QTime::currentTime();
qsrand(randtime.msec()+randtime.second()*1000); //以当前时间ms为随机种子
int n = qrand() % 100; //产生100以内的随机整数
//方法2如下:
int t = QRandomGenerator::global()->generate()%10;//产生10以内的随机整数
QDesktopWidget* mydesktopWidget = QApplication::desktop();//获取屏幕属性
qDebug()<<"屏幕宽高分别为: "<width()<height();
this->setWindowFlags(Qt::FramelessWindowHint);//设置无窗口框架边界
this->setAttribute(Qt::WA_TranslucentBackground);//设置背景透明
this->setFixedSize(1920,1080);//设置窗口大小
//.h文件中声明
void timerEvent(QTimerEvent *);
//.app中实现
void Widget::timerEvent(QTimerEvent *eve)
{
if(eve->timerId()==id1){//第一个定时事件
qDebug()<<"事件1"<timerId();
}
if(eve->timerId()==id2){//第二个定时事件
qDebug()<<"事件2"<timerId();
}
}
//启用定时器
int tim1 =startTimer(20);
int tim2 = startTimer(2000);
此处应该注意,使用该模块需要在.pro中添加multimedia模块,添加QMediaPlayer和QMediaPlaylist头文件,具体操作如下。
//添加播放音乐
myPlayer=new QMediaPlayer(this);
QString musName = QDir::currentPath();
myPlayer->setVolume(50);//设置音量:
playList = new QMediaPlaylist(this); //创建 播放列别
playList->addMedia(QUrl(musName+"/music/HappyBirthDay.mp3"));
playList->setPlaybackMode(QMediaPlaylist::Loop);// 通过设置 播放列表循环 实现循环播放
myPlayer->setPlaylist(playList);// 设置 播放列表到播放器
myPlayer->play(); //开始播放
Day11QPainter
//设置托盘菜单信息
myIcon = new QSystemTrayIcon(QIcon(":/temp/close.png"));
myIcon->setToolTip("close");//菜单提示
//设置右键菜单
QMenu * myMenu = new QMenu;
QAction *subAct = new QAction("close");
// subAct->setIcon(QIcon(":/temp/close.png"));
myMenu->addAction(subAct);
myIcon->setContextMenu(myMenu);
myIcon->show();
connect(subAct,&QAction::triggered,[=](){
this->close();
});
main文件
#include "widget.h"
#include
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
.h文件
#ifndef WIDGET_H
#define WIDGET_H
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
#define PIC_NUM 8
#define ALL_NUM 50
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
protected:
void paintEvent(QPaintEvent *);
void timerEvent(QTimerEvent *);
private:
Ui::Widget *ui;
QPixmap my_pic[PIC_NUM];
QPixmap all_pic[ALL_NUM];
QPoint point[ALL_NUM];
int y_speed[ALL_NUM];
QPixmap mLove[6];
QTime randtime;
// QTimer *timer;
QSystemTrayIcon *myIcon;
QMediaPlayer *myPlayer;//播放器指针
QMediaPlaylist *playList;
int cnt;
int id1;
int id2;
};
#endif // WIDGET_H
.cpp文件
#include "widget.h"
#include "ui_widget.h"
#include
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
cnt = 0;
id1 = 0;
id2 = 0;
this->setWindowTitle("Happy Birthday!");
this->setWindowFlags(Qt::FramelessWindowHint);//设置无窗口框架边界
this->setAttribute(Qt::WA_TranslucentBackground);//设置背景透明
QDesktopWidget* desktopWidget = QApplication::desktop();//获取屏幕属性
this->setFixedSize(desktopWidget->width(),desktopWidget->height());//适应屏幕大小
//加载初始8张下落图片
for(int i = 0;igenerate()%PIC_NUM;
all_pic[j] = my_pic[n];
int w = QRandomGenerator::global()->generate()%this->width();
point[j].rx()= w;
int h = QRandomGenerator::global()->generate()%this->height();
point[j].ry()= -h;
int y = QRandomGenerator::global()->generate()%10+5;
y_speed[j] = y;
}
id1 =startTimer(20);
id2 = startTimer(2000);
//设置托盘菜单信息
myIcon = new QSystemTrayIcon(QIcon(":/temp/close.png"));
myIcon->setToolTip("close");//菜单提示
//设置右键菜单
QMenu * myMenu = new QMenu;
QAction *subAct = new QAction("close");
// subAct->setIcon(QIcon(":/temp/close.png"));
myMenu->addAction(subAct);
myIcon->setContextMenu(myMenu);
myIcon->show();
connect(subAct,&QAction::triggered,[=](){
this->close();
});
//add love
for(int k = 0;k<6;k++){
QString filename = QString(":/temp/mlove%1.jpg").arg(k);
mLove[k] = QPixmap(filename);
}
// mLove = mLove.scaled(desktopWidget->width(),desktopWidget->height()-20);
//添加播放音乐
myPlayer=new QMediaPlayer(this);
QString musName = QDir::currentPath();
myPlayer->setVolume(50);//设置音量:
playList = new QMediaPlaylist(this); //创建 播放列别
playList->addMedia(QUrl(musName+"/music/HappyBirthDay.mp3"));
playList->setPlaybackMode(QMediaPlaylist::Loop);// 通过设置 播放列表循环 实现循环播放
myPlayer->setPlaylist(playList);// 设置 播放列表到播放器
myPlayer->play(); //开始播放
}
Widget::~Widget()
{
delete ui;
}
void Widget::paintEvent(QPaintEvent *Eve)
{
QPainter painter(this);
painter.drawPixmap(0,0,mLove[cnt]);//画一张图
//设置字体
QFont font = painter.font();
font.setPixelSize(100);
painter.setFont(font);
QPen pen = painter.pen();
pen.setColor(Qt::red);
painter.setPen(pen);
QDesktopWidget* desktopWidget = QApplication::desktop();//获取屏幕属性
const QRect rectangle = QRect(desktopWidget->width()/2-100, desktopWidget->height()/2, 1000, 100);
painter.drawText(rectangle, 0, tr("杰敏,生日快乐!"));
for(int i=0;itimerId()==id1){//第一个定时事件 切照片
for(int j = 0;jthis->height()){
point[j].ry() = 0;
}
}
update();
}
if(eve->timerId()==id2){//第二个定时事件 坠花朵
cnt++;
if(cnt==6){
cnt=0;
}
}
}