• 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项是跨平台使用的。

  • 相关阅读:
    【POJ3237】Tree 树链剖分+线段树
    【BZOJ3531】[Sdoi2014]旅行 树链剖分+动态开点线段树
    【BZOJ4034】[HAOI2015]树上操作 树链剖分+线段树
    【BZOJ1984】月下“毛景树” 树链剖分+线段树
    【BZOJ2243】[SDOI2011]染色 树链剖分+线段树
    【BZOJ1036】[ZJOI2008]树的统计Count 树链剖分
    树形DP水题杂记
    【BZOJ1827】[Usaco2010 Mar]gather 奶牛大集会 树形DP
    【BZOJ1864】[Zjoi2006]三色二叉树 树形DP
    【BZOJ1060】[ZJOI2007]时态同步 树形DP
  • 原文地址:https://www.cnblogs.com/xiwen2017/p/9634769.html
Copyright © 2020-2023  润新知