Qt实现全屏下玫瑰花(含详细注释)

583 篇文章 127 订阅

功能:

1. 识别屏幕分辨率

2. 托盘程序

3.随机下玫瑰花


程序源码及素材下载:
http://pan.baidu.com/s/1ceH2wQ

 

IDE Qt Creator

先上图:




部分代码展示:

GBK.h

<span style="font-family:SimSun;font-size:18px;">#ifndef _QT_GBK_H
#define _QT_GBK_H


#include <QString>
#include <QTextCodec>
#include <string>
using std::string;

class GBK
{
public:
	// QString(Unicode) -> std::string (GBK)
	static string FromUnicode(const QString& qstr)
	{
		QTextCodec* pCodec = QTextCodec::codecForName("gb2312");
		if(!pCodec) return "";	

		QByteArray arr = pCodec->fromUnicode(qstr);
		string cstr = arr.data();
		return cstr;
	}

	// std::string (GBK) -> QString(Unicode)
	static QString ToUnicode(const string& cstr)
	{
		QTextCodec* pCodec = QTextCodec::codecForName("gb2312");
		if(!pCodec) return "";

		QString qstr = pCodec->toUnicode(cstr.c_str(), cstr.length());
		return qstr;
	}

};


#endif</span>

mainwidget.h

<span style="font-family:SimSun;font-size:18px;">#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include <QWidget>
#include <QPixmap>
#include <QSystemTrayIcon>
#include <QPainter>
#include <QPoint>
#include <QMouseEvent>
#include <QMenu>
#include <QIcon>
#include <QMovie>
#include <QSound>

#include "GBK.h"
#include "rose.h"


namespace Ui {
class mainWidget;
}

class mainWidget : public QWidget
{
    Q_OBJECT

public:
    explicit mainWidget(QWidget *parent = 0);
    ~mainWidget();

    virtual void mouseMoveEvent(QMouseEvent *event);
    virtual void mousePressEvent(QMouseEvent *event);
    virtual void mouseReleaseEvent(QMouseEvent *event);

public slots:
    void OnExitBtn();	//隐藏程序,调用托盘
    void OnShowActive();	//托盘显示程序
    void SoundShow(const string filepath,bool loop);
    int OnSystemTrayClicked(QSystemTrayIcon::ActivationReason reason);
    int OnExitWindows();
    void OnClickHere(); // “点这里”相关处理



private:
    Ui::mainWidget *ui;

    void closeEvent(QCloseEvent *event);    //重写close按钮
    virtual void paintEvent(QPaintEvent *event);

    QPixmap m_MainWidgetImage;
    bool m_dragging;	//是否正在拖动
    QPoint m_startPosition; //拖动开始前的鼠标位置
    QPoint m_framePosition;	//窗体的原始位置

    QSystemTrayIcon m_systray;	//托盘图标

    Rose *rose;


};

#endif // MAINWIDGET_H</span>

rose.h

<span style="font-family:SimSun;font-size:18px;">#ifndef ROSE_H
#define ROSE_H

#include <QObject>
#include <QWidget>
#include <QLabel>
#include <QPixmap>
#include <QSize>
#include <QApplication>
#include <QDesktopWidget>
#include <QTimerEvent>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#include <QCloseEvent>


class Rose : public QWidget
{
    Q_OBJECT
public:
    explicit Rose(QWidget *parent = 0);
    void GetScreenInfo();   //获得屏幕分辨率
    void closeEvent(QCloseEvent *event);

    int Screen_x;   //屏幕x轴
    int Screen_y;   //屏幕y轴

signals:

public slots:

protected:
    void timerEvent(QTimerEvent *event);

private:
    virtual void paintEvent(QPaintEvent *event);

    QLabel *rose_1[20];
    QLabel *rose_2[5];
    QLabel *rose_3[5];
    QLabel *rose_4[5];
    QLabel *rose_5[5];

    int rand_x_rose_1[20][2];    //rose1 20个的玫瑰花坐标  第二个为玫瑰的速度
    int rand_x_rose_2[5][2];    //rose2 5个的玫瑰花坐标  第二个为玫瑰的速度
    int rand_x_rose_3[5][2];     //rose3 5个的玫瑰花坐标  第二个为玫瑰的速度
    int rand_x_rose_4[5][2];    //rose4 5个的玫瑰花坐标  第二个为玫瑰的速度
    int rand_x_rose_5[5][2];    //rose4 5个的玫瑰花坐标  第二个为玫瑰的速度


    int crood_y_rose_1[20];       //rose_1 的y坐标
    int crood_y_rose_2[5];      //rose_2 的y坐标
    int crood_y_rose_3[5];      //rose_3 的y坐标
    int crood_y_rose_4[5];      //rose_4 的y坐标
    int crood_y_rose_5[5];      //rose_5 的y坐标


    int RoseSpeed_Kind[10];      //玫瑰的10种不同的速度


};

#endif // ROSE_H</span>


Qt中,实现全屏打印图片通常涉及以下几个步骤: 1. 导入所需的库:首先,你需要包`QPrinter`、`QPainter`以及`QImage`等库,它们分别用于处理打印机、绘制图像和读取图像。 ```cpp #include <QApplication> #include <QPrinter> #include <QPainter> #include <QImageReader> ``` 2. 加载图片:创建一个`QImageReader`实例并从文件路径加载图片。 ```cpp QImage image("path_to_your_image"); ``` 3. 设置打印机属性:创建一个`QPrinter`对象,并设置为全屏模式(例如`QPrinter::HighResolution`),以及纸张大小等选项。 ```cpp QPrinter printer; printer.setOutputFormat(QPrinter::NativeFormat); printer.setFullPage(true); // 全屏打印 printer.setSize(QSize(image.width(), image.height())); ``` 4. 创建画布并开始绘画:使用`QPainter`在打印机上作画,先将`QPainter`绑定到`QPrinter`。 ```cpp painter.begin(&printer); ``` 5. 绘制图片:最后,在画布上绘制加载的图像。 ```cpp painter.drawImage(0, 0, image); ``` 6. 完成操作并打印:结束绘画后,发送打印命令。 ```cpp painter.end(); printer.print(); // 打印图片 ``` 完整示例: ```cpp int main(int argc, char *argv[]) { QApplication app(argc, argv); QImage image("path_to_your_image"); QPrinter printer; printer.setOutputFormat(QPrinter::NativeFormat); printer.setFullPage(true); printer.setSize(image.size()); QPainter painter(&printer); painter.drawImage(0, 0, image); painter.end(); printer.print(); return app.exec(); } ```
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT1995

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值