1. 信号和槽
class 类名{
Q_OBJECT
public slots:
槽函数
signals:
信号函数
};
1.1通过Signals And Slot Edit进行连接
只支持QT类提供的信号和槽函数
1.2 通过QT组件,右键转到槽
要求信号函数是QT类提供,槽函数自定义
1.3 自定义的信号函数和槽函数
emit 信号函数名(实参表);
需要手动的进行连接(connect)
1.4 信号和槽函数进行连接时,注意信号函数
和槽函数的形参表保持一致。
2. 消息框类
QMessageBox类
QDebug类
3. 登录框
QDialogButtonBox类
QPixMap类
QIcon类
4. 颜色和字体类
QFontDialog类
QColorDialog类
QFont类
QColor类
5. 数据库操作的类
QSqlQuery
QSqlQueryModel
QSqlDababase
QSqlError
6.资源
资源:
1>利用QT创造器和资源编译器(rcc)可以很方便地在工程中添加图像、
音视频等多媒体资源,并与应用程序结合在一起
2>事实上Qt的资源由两部分组成
媒体文件:图像、音视频文件本身,如:logo.png
资源脚本:用于描述资源的XML文件,如: ShowPics.qrc
3>C++编译器无法理解二进制形式的媒体文件和XML格式的
资源脚本,因此需要先用QT的资源编译器rcc将资源
脚本连同它所引用的媒体文件一起编译成C++源文件
rcc -name ShowPics ShowPics.qrc -o qre_ShowPics.cpp
4>资源数据作为C++代码的一部分被嵌入到可执行程序中
5>以上编译过程已被包含在 qmake生成的 Makefile脚本中
7.事件
7.1 什么是事件? (重点)
事件是由窗口系统或者自身产生的,用以响应所发生的
各类事情,比如用户按下并释放了键盘或者鼠标、窗口因
暴露而需要重绘、定时器到时而应有所动作,等等
从某种意义上讲,事件比信号更原始,甚至可以认为大多
数信号其实都是由事件产生的。比如一个下压式按钮首先
感受到的是鼠标事件,在进行必要的处理以产生按钮下沉
继而弹起的视觉效果之后,才会发射 clicked()信号
7.2 如何处理事件? (重点)
myWnd --> QWidget -> QObject
1> 当事件发生时,首先被调用的是QObject类中的虚函数event(),
其 QEvent型参数标识了具体的事件类型
伪代码:
bool QObject:: event (QEvent* e)
{
if (e == mouse)
{
void QWidget::mousePressEvent (QMouseEvent* e)
void QWidget:: mouseReleaseEvent (QMouseEvent* e)
}
if(e == key)
{
void QWidget::keyPressEvent (QMouseEvent* e)
void QWidget:: keyReleaseEvent (QMouseEvent* e)
}
}
2> 作为QObject类的子类, QWidget类覆盖了其基类中的
event()虚数,并根据具体事件调用具体事件处理函数
void QWidget::mousePressEvent (QMouse Event* e)
void QWidget::mouseReleaseEvent (QMouse Event* e)
void QWidget::paintEvent (PaintEvent* e):
3> 而这些事件处理函数同样也是虚函数,也可以被 QWidget类
的子类覆盖,以提供针对不同窗口部件类型的事件处理
4> 部件的使用者所关心的往往是定义什么样的槽处理什么样的信号,
而不见的实现者更关心覆盖哪些事件处理函数
5> paintEvent 绘制事件
当有下列情况之一发生时,窗口部件会收到绘制事件,
即 QWidget类的 paintEvent()虚函数会被调用
最终调用的是子类中重写的PaintEvent()事件函数
窗口被创建以后第一次显示出来
窗口由隐藏状态转变为可见状态
窗口由最小化状态转变为正常或最大化状态
窗口超出屏幕边界的区域进入屏幕范围之内
窗口被遮挡的区域因某种原因重新暴露出来
窗口因尺寸大小的变化需要呈现更多的内容
QWidget类的 update()成员函数被调用
6> 作为 QWidget类的子类,可以在对该虚函数的覆盖版本中
实现诸如显示文本、绘制图形、瀘染图像等操作
void ShowPicsDlg::paintEvent(QPaintEvent *e)
7> QPainter类是Qt的二维图形引擎,该类具有如下功能
绘制矢量文字
绘制几何图形
绘制响度映射和图像
反走样,像素混合,渐变和矢量路径
平移、选择、错切、缩放等线性变换
8> QPainter类通过构造函数接收绘制设备,即在什么上画
QPainter::QPainter(QPaintDevice* device);
9> QPainter类用于渲染图像的众多成员函数之一
void QPainter::drawImage(const QRect& rect,const QImage& image);
8.QImage类
8.1图形图像处理的难点往往并不在于算法的复杂性,而是
如何在速度与精度之间进行取舍
1》如果直接在 QWidget上进行绘制,速度往往是最快的,但精
度则完全依赖于平台自带的渲染引擎,比如 Linux的X11或
者 Windows的GDI,相同代码的渲染效果因之大相径庭
2》当精度重于速度时,不妨把所有内容都绘制在QImage上,
最后再将渲染结果一次性复制到屏幕。这样可以总是使用
QT内置的渲染引擎,以在所有平台上获得相同的显示效果
2.QImage已经内置了针对不同格式图像的处理算法
BMP、GIF,JPG,JPEG、PNG、PBM、PGM、PPM、TIFF,XBM, XPM
3.QImage既可以从文件也可以从资源文件中加载图像
QImage::QImage (const char* fileName,const char* format=0)
4. 借助绘制事件、 QPainter和 QImage在窗口中显示图像
void ShowPicsDIg::paintEvent (QPaintEvent* e) {
QPainter painter (this)
QRect rcImage = ui->m_frmImage->frameRect();
rcImage.translate(ui->m_frmImage->pos());
QImage image ( ":/images/"+
QString::number(m_idxImage)+".jpg");
painter. drawImage(rclmage, image);
}
5.窗口绘制除了由系统自动触发外,也可以人为手动触发
void QWidget::update (void); //引发绘制事件
void QWidget::repaint (void); //直接调用
paintEvent();