九、资源和图像
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