zoukankan      html  css  js  c++  java
  • Qt 中事件与处理

    一、事件与处理
    程序在运算过程中发生的一些事情:鼠标单击、键盘的按下...
    这些的事件的监控与处理在Qt中不是以信号的方式处理的。
    当这些事件发生时会调用QObject类中的功能函数(虚函数),所有的控件类都继承了这个类。

    常用的鼠标事件:
    void mousePressEvent(QMouseEvent *); 按下
    void mouseReleaseEvent(QMouseEvent *); 弹起
    void mouseMoveEvent(QMouseEvent *); 按下时并移动
    void mouseDoubleClickEvent(QMouseEvent *); 双击(会触发按下和弹起);

    通过QMouseEvent 可以判断出是个按键:
    event->button() == Qt::LeftButton
    event->button() == Qt::RightButton
    event->button() == Qt::MidButton

    常用的键盘事件:
    void keyPressEvent(QKeyEvent *); 按下
    void keyReleaseEvent(QKeyEvent *); 弹起

    通过QKeyEvent 可以判断出按键的键值:
    event->key == Qt::Key_Up;

    常用的窗口事件:
    void closeEvent(QCloseEvent *); 窗口关闭
    void paintEvent(QPaintEvent *); 窗口显示
    void moveEvent(QMoveEvent *); 窗口移动

    二、线程与多线程
    1、在Qt中什么情况下需要多线程?
    在单线程时,如果在耗时较长的操作,那么主界面会被阻塞。
    会产生卡死的现象。

    2、Qthread类
    a、必须要继承
    b、必须要重写run函数

    3、等待线程
    QThread::wait(time);
    功能:等待线程结束并回收,与pthread_join一样。
    time:设置要等待的秒数,如果时间到了线程还没有结束则等待失败,默认值是ULONG_MAX(一直等下去)。

    4、终止线程
    QThread::terminate(),让线程结束执行。
    terminated(),线程结束信号。

    练习:如何用信号槽,在子线程里发送信号给主线程,让主线程显示图片(修改GUI主界面)。
    1、在创建类时立即添加 Q_OBJECT
    2、如果编译后末添加,把所有Qt自动生成的文件删除
    3、使用qmake -project、qmake、make

    三、线程同步
    QMutex 互斥量
    QReadWriteLock 读写锁
    QSemaphore 信号量
    QWaitCondition 条件变量

    功能与Linux系统中的一样,但这4项是跨平台使用的。

  • 相关阅读:
    深度图像的获取原理
    第二章 排序 || 第19节 最短子数组练习题
    第二章 排序 || 第18节 有序矩阵查找练习题
    tensorflow 之tf.nn.depthwise_conv2d and separable_conv2d实现及原理
    tensorflow 之常见模块conv,bn...实现
    机器学习中的训练数据不平衡问题
    一些智力题
    Pytoch 抽取中间层特征方法
    娱乐一下
    java访问ad域
  • 原文地址:https://www.cnblogs.com/bruce1992/p/14256974.html
Copyright © 2011-2022 走看看