IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> Qt事件处理机制---画图事件为例 -> 正文阅读

[C++知识库]Qt事件处理机制---画图事件为例

信号和槽就是依赖于Qt的事件处理机制,通常事件是由窗口系统或者Qt自身产生的,用以响应所发生的各类事情,比如用户按下并释放了键盘或者鼠标、窗口因缩放而需要重绘、定时器到期而应有所动作。如下图可以看到事件比信号更原始,一个下压式按钮首先感受到的是鼠标事件,在进行必要的处理以产生按钮下沉继而弹起的视觉效果之后,才会发射clicked()信号。

鼠标事件、键盘事件、画图事件、定时器事件等等。

Qt已经写好了鼠标、键盘、画图、定时器等事件,这些事件的对象类型都是继承QEvent抽象类,在C++中:抽象类的子类要重写父类的虚函数,不然就无法实例化对象。其实在UI界面,Qt一直在捕捉我的操作,这些捕捉的操作就是事件,只是Qt中这些事件如果我们不写其实现,那么它就是空实现,不会执行任何处理。

以画图事件为例:void paintEvent(QPaintEvent *);可以看到这个函数的参数,QPaintEvent ,这个可以理解为当前画图事件,然后多态的中有一点父类指针指向子类对象,QPaintEvent *就是父类指针,void paintEvent(QPaintEvent *)函数为其成员函数,由于多态,所以我们就需要重写这个函数。

UI界面实现

?较为简单,除了照片框frame组件的大小需要在

下图的垂直策略调整一些,其他的都没什么。?

代码

showImageDialog::showImageDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::showImageDialog)
{
    ui->setupUi(this);
    index=1;//图片索引,一共有4张图片,序号为01至04
}

showImageDialog::~showImageDialog()
{
    delete ui;
}

//上一张
void showImageDialog::on_pushButton_clicked()
{
    index--;//索引自减
    if(index==0)
    index=4;
    update();//更新事件
}

//下一张
void showImageDialog::on_pushButton_2_clicked()
{
    index++;//索引自加
    if(index==5)
    index=1;
    update();//更新事件
}

//重写画图事件
void showImageDialog::paintEvent(QPaintEvent *)
{
    QPainter painter;//定义画家类对象,也可以这样定义:QPainter painter(this),那么就可以将下面的
    //painter.begin(this);和painter.end();去掉,可以查阅帮助手册

    QRect rect=ui->frame->frameRect();//获取frame组件矩形框的大小
    //虽然获取的frame组件矩形框的大小,但是我们画图需要在矩形框的左上角开始画,所以需要坐标偏移
   //translate为坐标偏移函数,然后pos()为坐标函数
    rect.translate(ui->frame->pos());

    painter.begin(this);//开始画图
    //构建要绘制的图片对象image,也就是要先加载图片
    QImage image(":/Saved Pictures/qt0"+QString::number(index)+".jpg");//当前工程目录
    
    //将加载的图片image绘制到rect区域中
    painter.drawImage(rect,image);
    painter.end();//结束画图
}

总结

1、Qt中像画图、鼠标键盘和定时器等事件是不需要绑定信号与槽,如果绑定了,那如果信号发出去,就相当于执行了2此该事件函数,这个要注意。

2、其次是资源文件,即图片文件,这个较为容易,需要注意加载图片是在当前工程目录还是电脑的系统目录下,区分符号为:号。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-02-19 00:58:09  更:2022-02-19 01:00:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:57:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码