C++QT复习

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();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小徐的记事本

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值