美文网首页
Day03总结,蝴蝶飞Demo

Day03总结,蝴蝶飞Demo

作者: xqiiitan | 来源:发表于2025-05-04 18:35 被阅读0次

Day04 文件操作

打开文件,读写文件,关闭文件
文本流:QTextStream
数据流:QDataStream

1.自定义控件步骤:

  • a.创建一个自定义控件类
  • b.在要提升的控件身上,右键-> 提升为...
  • c.对话框中,添加类(自定义类名称)--> 提升。

2.绘图和绘图设备

1.画家类 QPainter 绘图设备。
1.构造函数的参数--> QPainter p(绘图设备)
2.在当前窗口中画图: QWidget派生的类,
重写paintEvent()函数,在里面使用画家类画图。

2.绘图设备:
A: QPixmap p;
p.load(路径) 加载图片。
p.drawPixmap(b);

a.专门为图像在屏幕上显示做了优化,依赖于平台。
b.主要应用于平台商的图形显示,在不同平台拥有相同的显示效果。

B: QBitmap b,是一个子类,只显示黑白色。
p.drawBitmap(b);
C: QImage 像素点阵列。
a.使用独立于硬件的绘制系统,专门为图像的像素访问做了优化。
b.可以在多线程中使用。
c.可以修改图片中的任何一个像素值。 **
D: QPicture 并不是图片,只是二进制文件,存储一些指令。
a.记录和重现QPainter的各条命令。
b.与平台无关。

3.QPixmap 和QImage 之间的相互装换。 QPixmap类提供。

a. QPixmap --> QImage: QPixmap::toImage()
b. QImage --> QPixmap:QPixmap::fromImage() //static

4. 手动更新窗口函数。

update() 自动触发paintEvent() 函数。

蝴蝶飞效果。

// widget.h

private:
    QPixmap up; // 两张图片:翅膀向上,向下。
    QPixmap down;
    bool flag; // 区分图片的
    int x; 
    int y;

// widget.cpp

// define FANGAN_1
#ifndef FANGAN_1
#include <QDesktopWidget>
#endif
//构造函数
Widget::Widget(QWidget *parent) :QWidget,
    ui(new Ui::Widget) 
{
    ui->wetupUi(this);
    this->setWIndowFlags(Qt::FramelessWindowHint);
    this->setAttribute(Qt::WA_TranslucentBackground);
    
    flag = true;
    up.load("D:\\up.png");
    down.load("D:\\down.png");
    QTimer *timer = new QTimer(this);
    timer->start(250); //定时器开启
    
#ifdef FANGAN_1
    //当前窗口最大化,计算坐标让蝴蝶在当前窗口中移动,窗口保持不动    
    connect(timer, QTimer::timeout, [=](){
        flag = !flag;
        qsrand(time(NULL)); // 事件种子
        //计算飞行路径
        x = qrand()%20 + x;
        y = qrand()%20 + y;
        if(x > width()) x=0;  //右边界出界,从左边再出来
        if(x<0) x =  width(); //左边界
        if(y > height()) y=0; //下边界 
        if(y<0) y =  height();//上边界
        update();             //刷新窗口
    });
    this->showMaximized(); // 窗口最大化,设置时间种子。
    qsrand(time(NULL));
    x = qrand() %width(); // 获取随机值
    y = qrand() %height();
#else 
    // 获取屏幕坐标,让窗口在屏幕上移动,蝴蝶在窗口中的位置不动
    connect(timer, &QTimer::timeout, [=]() {
        flag = !flag;
        // 桌面窗口指针。
        QDesktopWidget *wg = QApplication::desktop(); //静态方法
        qsrand(time(NULL));
        // 计算飞行路径,xy坐标
        x = qrand()%20 + frameGeometry().topLeft().x(); 
        y = qrand()%20 + frameGeometry().topLeft().y();
        if(x > wg->screenGeometry().right()) x=0; //右边界
        if(x < wg->screenGeometry().left()) // 左边界   
            x = wg->screenGeometry().right();
        
        if(y < wg->screenGeometry().top()) {
            y = wg->screenGeometry().bottom(); //上边界
        }
        if(y > wg->screenGeometry().bottom()) {
            y = 0; //下边界
        }
        move(x,y); // 移动窗口
        update();  //刷新窗口
    });
#endif  
}   
void Widget::paintEvent(QPaintEvent *) {
    QPainter p(this);
#ifdef FANGAN_1
    if(flag){
        p.drawPixmap(x,y, up);
    } else {
        p.drawPixmap(x,y, down);
    }       
#else 
    if(flag) { //切换图片
        p.drawPixmap(0,0, up);
    }else {
        p.drawPixmap(0,0, down);
    }
#endif
}

相关文章

  • 蝴蝶与蝴蝶花

    蝴蝶是能飞的蝴蝶花, 蝴蝶花是不能飞的蝴蝶。 蝴蝶花是不能飞的蝴蝶, 蝴蝶 是能飞的蝴蝶花。 蝴蝶花是蝴蝶, 蝴蝶...

  • 蝴蝶飞,花蝴蝶飞。

    由于网络的原因,我们班的手工课拖到现在才开展,可把班里的孩纸们急坏了,开心的是终于迎来了孩子们期待已久的手工课。 ...

  • 幼儿简单诗歌

    花和蝴蝶 林焕彰 花是不会飞的蝴蝶, 蝴蝶是会飞的花。 蝴蝶是会飞的花, 花是不会飞的蝴蝶。 花是蝴蝶, 蝴蝶也是...

  • 《诸城一怪闲话@蝴蝶谷》

    蝴蝶飞呀飞 蝴蝶飞过蝴蝶谷 蝴蝶谷恋人爱

  • 《蝴蝶飞》

    《蝴蝶飞》 远处一只蝴蝶飞,千人万人把她追。花园蝴蝶飞芳草,蓝色蝴蝶紫蝴蝶...

  • 蝴蝶飞

    蝴蝶飞 文:余元峰 今日,我已无想念的人她在远方,太子湾的郁金香散布在你昨夜的怀里 如何去追赶一束光秋天的站台鸦雀...

  • 蝴蝶飞

    山花烂漫的时候你慢慢飞 山林花朵香又美 你是蝶儿我在追 你让我日日夜夜都沉醉 泉水叮咚的时候你翩翩飞 山林清泉甘甜...

  • 蝴蝶飞

    摄影真是好 能把人的梦幻实现了 像蝴蝶一样飞 那薄如蝉翼的霓裳 微微扬起的脸庞 做好了飞翔的ready 这样的画面...

  • 蝴蝶飞

    蝴蝶飞 作词:白传英 一只蝴蝶在那空中飞, 像是预言打开我心扉, 明明只有我一个人向北, 眼里却陪伴着你的疲...

  • 蝴蝶飞

    周晓满手工作品

网友评论

      本文标题:Day03总结,蝴蝶飞Demo

      本文链接:https://www.haomeiwen.com/subject/recfijtx.html