day_04_资源和图像、目录和定时器、鼠标和键盘

本文介绍了QT开发中的资源和图像处理,包括使用资源编译器rcc创建和转换资源,以及利用Qpainter进行绘图和实现图片浏览器。此外,还讲解了目录操作QDir、定时器事件timerEvent()的使用,并给出了摇奖机案例。最后探讨了鼠标事件处理,如鼠标按下、抬起、移动等,以及如何实现鼠标拖拽label组件的移动。
摘要由CSDN通过智能技术生成

九、资源和图像

1、资源编译器(rcc)

1)创建资源脚本(xml)
<RCC>
    <qresource prefix="/">
        <file>0.jpg</file>
    </qresource>
</RCC>
2)转换为C++源文件

  $ rcc test.qrc -o qrc_test.cpp

2、绘图事件

1)当程序开始运行时或窗口发生改变时会触发绘图事件,对应的事件处理函数paintEvent;

void QWidget::paintEvent(QpainEvent*)[virtual]

2)通过调用update函数也可以触发绘图事件;

class QWidget{
    virtual void paintEvent(QPaintEvent*){}
    void update(){
        paintEvent();
    }
};
class A:public Qwidget{
    void paintEvent(QPaintEvent*){}
};

3)绘制事件函数是虚函数,如果想在自定义窗口中绘制指定的图像,可以通过重写paintEvent,在其中使用“画家”类来实现具体图像绘制;

3、画家类Qpainter

1)QT的二维图形引擎,实现在任何Widget组件中绘制图形;
QPainter::QPainter(QPaintDevice *device)

参数绘制设备:可以QWidget或它的子类对象指针;

2)绘制图像的函数
void drawImage(const QRect& target, const QImage& image);

@target:要绘制目标组件的矩形区域;

QRect rcImage = ui->frame->frameRect();

@image:要绘制的图像

QImage image(":/images/xx.jpg");

注意:":"表示资源文件路径

4、案例:图片浏览器

解压:$ tar xvf material.tar.bz2

使用Qtcreator创建工程
 1)工程名:ShowPics
 2)类名:ShowPicsDialog
 3)设计界面
   windowTitle:图图秀
   frame:
     sizePolicy:垂直策略(expanding)
     frameShape:box
   m_btnPrev(上一张)m_btnNext(下一张)m_btnClose(关闭)
4)向工程中添加图片资源
将image目录拷贝到工程目录下
添加新文件
Qt –> qt resource file
ShowPics(指定资源文件名)
进入资源文件编辑

十、目录和定时器

1、目录操作QDir

QDir::QDir(const QDir &dir);

@path:表示要访问的路径
绝对路径:

QDir dir("/home/maple/...");
QDir dir("C:/Document and Settins/...")

相对路径:

QDir dir("./photo");

2)遍历和访问目录

QStringList QDir::entryList(const QStringList &nameFilters, Filters filters = NoFilter, SortFlags sort = NoSort) const

@filter:指定访问的内容

QDir::Files  // 普通文件
QDir::Dirs   // 目录
QDir::NoDotandDotDot  // 不包含"."和".."

eg:

// 遍历打印dir目录中所有的文件名
foreach(QString filename, dir.entryList(QDir::Files)){
    qDebug() << filename;
}

2、定时器事件timerEvent()

1)定时器到时候,会自动执行定时器事件处理函数

void QObject::timerEvent(QTimeEvent*)[virtual];

2)开始定时器,每隔interval毫秒触发一次定时器事件,返回定时器ID

int QObject::startTimer(int interval);

3)停止定时器

void QObject::killTimer(int id);

3、案例:摇奖机

1)工程名:Ernie
2)类名:ErnieDialog
3)拷贝phptos到工程目录下
4)设置UI
  frame:垂直策略(expanding)
  pushbutton
  设置父窗口背景颜色:
  autofilebackground:打√
  palette:
    点击“继承”–> 改变调色板,在调色板窗口 –> “快速”选择一个背景颜色

十一、鼠标和键盘

1、鼠标事件处理

1)鼠标按下

void mousePressEvent(QMouseEvent*);

2)鼠标抬起

void mouseReleaseEvent(QMouseEvent*);

3)鼠标移动

void mouseMoveEvent(QMouseEvent*);

eg:

if(event->button() == Qt::LeftButton){
    qDebug() << "鼠标左键";
}
else if(event->button() == Qt::RightButton){
    qDebug() << "鼠标右键";
}

2、案例:用鼠标拖拽label组件的移动

工程名:Mouse
类名:MouseDialog

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值