admin 管理员组

文章数量: 1184232

QT 笔记4

一 资源和图像
1 资源编译器(rcc)
1)创建资源文件(.qrc)

eg:<RCC><qresource prefix="/"><file>6.jpg</file></qresource></RCC>

2)将资源文件中描述的图片资源编译转换为C++源代码
eg:
rcc test.qrc -o qrc_test.cpp

2 绘图事件(paintEvent)和画家类(QPainter)
1)当应用程序窗口改变时(启动,拉伸,拖拽,最大/小化…)将会触发绘图事件,对应的事件处理函数paintEvent将会被执行.
virtual void QWidget::paintEvent(QPaintEvent*);
2)通过调用update()/repaint()函数也可以手动触发绘图事件
3)绘图事件处理函数是虚函数,如果希望在自定义子类中实现指定的图像绘制,可以重写绘图事件处理函数,对基类中的版本形成覆盖,并在其中通过画家类完成绘制操作。
4)QPainter是Qt中二维图形引擎,可以实现各种图像、图片的绘制。

案例:图图秀
1)使用qt创造器创建工程
–》工程名:ShowImage
–》类名:ShowImageDialog
2)向工程中添加资源
–》将需要使用资源图片(images)拷贝到工程目录下
–》添加新文件:Qt->Qt Resource file
–》指定资源文件名字:showImage(将来会自动生成showimage.qrc的资源文件)
–》下一步->完成:默认进入资源编辑界面
–》添加:添加前缀“/new/prefix1”
–》添加:添加文件,选择“images”目录下的10图片并打开
3)双击“.ui”文件,进入设计模式,完成界面设计
–》拖拽需要使用控件
Frame(显示框架) PushButton(按钮)
–》设置属性
父窗口:
font:点大小(20)
windowTitle:图图秀
frame:
sizePolicy:垂直策略(Expanding)
frameShape:Box
PushButton:
m_btnPrev(上一张)
m_btnNext(下一张)
–》使用布局器调整大小和位置
4)编码、测试

二 目录(QDir)和定时器(QTimer)

1 目录QDir
1)创建目录对象
QDir dir("/home/tarena/csd1911/qt/photos");//绝对路径
QDir dir("./photos");//相对路径
2)遍历目录下内容
//遍历子目录,不包括"." “…”
QStringList list1 = dir.entryList(QDir::Dirs|QDir::NoDotAndDotDot)
//遍历普通文件
QStringList list2 = dir.entryList(QDir::Files);

2 定时器
1)定时器事件:timerEvent
//定时器事件处理函数,定时器到时后将自动触发执行
virtual void timerEvent(QTimerEvent*);
//开启定时器,参数定时器到时的间隔时间(毫秒),返回定时器ID
int startTimer(int interval);
//关闭定时器
void killTimer(int id);
参考:Lottery

2)定时类:QTimer
//创建定时器对象
QTimer timer;
//连接定时器信号和槽函数
connect(&timer,SIGNAL(timeout()),this,SLOT(自定义定时器处理槽函数()));
//开启定时器
timer.start(int msec);
//关闭定时器
timer.stop();
参考:Lottery2

案例:摇摇乐
1)工程名:Lottery
2)类名:LotteryDialog
3)将“photos”目录拷贝到工程目录下,然后到Qt创造器的"项目"模式中去掉Shadow build选项
4)双击".ui"文件,进入设计模式,完成ui设计

三 鼠标和键盘

1 鼠标事件
#include
//鼠标按下时执行的事件处理函数
virtual void mousePressEvent(QMouseEvent*);
//鼠标抬起时执行的事件处理函数
virtual void mouseReleaseEvent(QMouseEvent*);
//鼠标移动时执行的事件处理函数
virtual void mouseMoveEvent(QMouseEvent*);
//鼠标双击时执行的事件处理函数
virtual void mouseDoubleClickEvent(QMouseEvent*);

QRect(x,y,w,h);//矩形区域
QPoint(x,y);//位置
QSize(w,h);//大小

案例:鼠标测试,实现用鼠标左键拖拽"Label"移动
1)工程名:Mouse
2)类名:MouseDialog
3)界面设计:设置label控件背景颜色
方法1:样式表(styleSheet)
styleSheet:编辑样式表
添加颜色:background-color
方法2:调色板(palette)
autoFillBackground:勾选√
palette:点击"继承"->“改变调色板”
编辑调色板:选择颜色

2 键盘事件
#include
//按键按下时执行的事件处理函数
virtual void keyPressEvent(QKeyEvent*);
//按键抬起时执行的事件处理函数
virtual void keyReleaseEvent(QKeyEvent*);

案例:键盘按键测试,实现通过键盘方向键控制label移动
1)工程名:Keyboard
2)类名:KeyboardDialog

本文标签: QT 笔记4