QT学习笔记(5):自定义控件

来源:互联网 发布:淘宝屈臣氏燕窝面膜 编辑:程序博客网 时间:2024/06/04 23:25

QT允许自定义窗口控件,并可以在QtDesigner中直接加到父窗口


绘制窗口:

(1)新建一个类,继承于QWidget或者QFrame,最好是QFrame

(2)重写函数paintEvent函数


怎么把自定义的控件加入到Designer里

(1)拖放一个父类控件(Widget或者Frame,在Containers)

(2)选定后右键,点Promote to(提升为),把新建的类名填入Promoted class name(提升的的类名称),然后点Add(添加),最后点promote(提升)即可


控件占满空间:

Qpainter painter(this);

int width = this->width();

int height = this->height();   //获得自己的参数

painter.drawEllipse(0,0,wigth,height);


绘制几何图形:

QT里是使用RGB颜色,用红,绿,蓝三种来定义,分量0~255(不用强记颜色的值,可查询)

QT里有两种绘制风格:

(1)QPen:负责线条的颜色和风格

(2)QBrush:负责填充的颜色和风格(对于非闭合形状如线条,是不用填充的)


QPainter的draw....()函数用来绘制各种图形,更具体的使用方法参考:http://blog.csdn.net/iamdbl/article/details/1630129


widget或者Frame的大小是允许绘制的范围,不要超过

默认情况下,后画覆盖前画


常用的几个类型:

QPoint 点坐标

QSize 宽度和高度

QRect 矩形的的坐标和大小

QPointF 浮点型点坐标

QRectF 浮点型矩形


动画的实现原理:每秒钟重绘N次,对人眼来说看起来是运动的

(1)创建定时器

(2)在定时器的处理函数里调用QWidget::update()函数,通知界面重绘

update函数只是通知界面界面重新绘制,会在事件循环中产生一个“绘制事件”paint Event,在合适的时候才会绘制


绘制字体:

(1)颜色:QPen

(2)字体:QFont

          参数:family:字体样式(宋体之类的),用字符串表示

                      size:大小

                      weight:粗细,QFont::Bold之类的

                      italic:是否倾斜

(3)drawText()函数的其中一个重载:前四个参数是位置和大小,第五第六个是对齐方式,最后一个是显示的文本

(4)换行显示:QTextOption对象的setWrapMode函数


绘制图片:

用QPixmap,支持png,jpg的加载

两个方式:

(1)定义QPixmap对象时直接在对象名后加括号,括号内的参数为文件地址

(2)定义QPixmap对象后用load函数,参数为文件地址

QT里图片文件有两种:

(1)系统内的文件,使用绝对路径或者相对路径

(2)资源里的文件,例子(:\xxxxx\resoures\img),注意冒号

绘制参数drawPixmap(target,QPixmap对象,sourse):

(1)源矩形sourse:绘制图像的全部或者一部分 QRect sourse(就是原图片显示多少)

(2)目标矩形target:可以填充到全部窗口或者一部分 QRect target(就是图片在窗口显示的位置)



鼠标事件(继承于QWidget)通过重写函数来让自定义控件支持鼠标事件:

(1)按下 press : [重写 void mousePressEvent(QMouseEvent *event)]

(2)抬起 release :[重写 void mouseReleaseEvent(QMouseEvent *event)]

(3)移动 move :[重写 void mouseMoveEvent(QMouseEvent *event)]

          需要用 setMouseTracking(bool)来监听

          括号内为true时,无需按下鼠标即可监听鼠标移动

          括号内为false时,需要按下鼠标后才可监听

(4)双击 double click :[重写 void mouseDoubleClickEvent(QMouseEvent *event)]

抬起与否一般要用到一个bool型的成员变量,移动要用到QPoint及QPoint类型的成员变量 来处理坐标。


自定义控件发生事件时应以一个信号的形式发送出去:

(1)在类的头文件里声明一个SIGNAL(类似于写一个函数原型)

(2)事件发生时,调用emit+空格+SIGNAL名(),通过emit将信号发送出去(非C++语法,QT自创)


隐藏窗口 hide()函数

屏幕截图 QPixmap xxx = QPixmap::grabWindow(QApplication::desktop()->winld())函数

声音的播放 QSound对象的play()函数

延时功能 QTimer::singleShot(时间,this,SLOT(xxxx))

保存图片功能 QPixmap对象的save()函数

QLabel显示的图片和文字自适应大小:属性 -- QLabel -- text -- scaledContents打勾

截屏的实例:http://blog.csdn.net/taiyang1987912/article/details/38274847

Qt程序全屏运行:showFullScreen()函数



0 0