91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Qt--Qt中的事件處理

發布時間:2020-07-23 17:15:34 來源:網絡 閱讀:781 作者:淡淡_小孩 欄目:編程語言

一.Qt事件處理

A.圖形界面應用程序的消息處理模型
Qt--Qt中的事件處理
B.Qt平臺將系統產生的消息轉換為Qt事件
1.Qt事件是一個QEvent的對象
2.Qt事件用于描述程序內部或外部發生的動作
3.任意的QObject對象都具備事件處理的能力
Qt--Qt中的事件處理
C.GUI應用程序的事件處理方式
1.Qt事件產生后立即被分到QWidget對象
2.QWidget中的event(QEvent)進行事件處理
3.event()根據事件類型調用不同的事件處理函數
4.在事件處理函數中發送Qt預定義的信號
5.調用信號關聯的槽函數
場景分析
Qt--Qt中的事件處理
QPushButton事件處理分析
1.接收到鼠標事件
2.調用event(QEvent
)成員函數
3.調用mouseReleaseEvent(QMouseEvent*)成員函數
4.調用click()成員函數
5.觸發SIGNAL(clicked())
代碼示例--自定義事件

QMyPushButton.cpp
#include "QMyPushButton.h"
#include <QMouseEvent>

QMyPushButton::QMyPushButton(QWidget* parent, QButtonListener* listener) : QPushButton(parent)
{
    m_listener = listener;
}

void QMyPushButton::mouseReleaseEvent(QMouseEvent *e)
{
    if( m_listener != NULL )
    {
        m_listener(this, e);

        e->accept();

        setDown(false);
    }
    else
    {
        QPushButton::mouseReleaseEvent(e);
    }
}

QMyPushButton.h
#ifndef QMYPUSHBUTTON_H
#define QMYPUSHBUTTON_H

#include <QPushButton>

typedef void (QButtonListener)(QObject*, QMouseEvent*);

class QMyPushButton : public QPushButton
{
    Q_OBJECT
protected:
    QButtonListener* m_listener;

    void mouseReleaseEvent(QMouseEvent *e);
public:
    explicit QMyPushButton(QWidget* parent = 0, QButtonListener* listener = 0);

signals:

public slots:

};
#endif // QMYPUSHBUTTON_H

Widget.cpp
#ifndef QMYPUSHBUTTON_H
#define QMYPUSHBUTTON_H

#include <QPushButton>

typedef void (QButtonListener)(QObject*, QMouseEvent*);

class QMyPushButton : public QPushButton
{
    Q_OBJECT
protected:
    QButtonListener* m_listener;

    void mouseReleaseEvent(QMouseEvent *e);
public:
    explicit QMyPushButton(QWidget* parent = 0, QButtonListener* listener = 0);

signals:

public slots:

};
#endif // QMYPUSHBUTTON_H

Widget.h
#ifndef QMYPUSHBUTTON_H
#define QMYPUSHBUTTON_H

#include <QPushButton>

typedef void (QButtonListener)(QObject*, QMouseEvent*);

class QMyPushButton : public QPushButton
{
    Q_OBJECT
protected:
    QButtonListener* m_listener;

    void mouseReleaseEvent(QMouseEvent *e);
public:
    explicit QMyPushButton(QWidget* parent = 0, QButtonListener* listener = 0);

signals:

public slots:

};
#endif // QMYPUSHBUTTON_H

運行的結果以及按鈕釋放時的打印結果如圖所示
Qt--Qt中的事件處理
D.事件和信號不同
1.事件由具體對象進行處理
2.信號由具體對象主動產生
3.改寫事件處理函數可能導致程序行為發生改變
4.信號是否存在對應的槽函數不會改變程序行為
5.一般而言,信號在具體的事件處理函數中產生
E.事件的傳遞過程
Qt--Qt中的事件處理
QEvent中的關鍵成員函數
1.void ignore()--接收者忽略當前事件,事件可能傳遞給父組件
2.void accept()--接收者期望處理當前事件
3.bool isAccepted()--判斷當前事件是否被處理
代碼生成的結果運行如圖所示
Qt--Qt中的事件處理
F.Qt中的事件過濾
1.事件過濾器可以對其他組件接收到的事件進行監控
2.任意的QObject對象都可以作為事件過濾器使用
3.事件過濾器對象需要重寫eventFilter()函數
組件通過installEventFilter()函數安裝事件過濾器
1.事件過濾器在組件之前接收到事件
2.事件過濾器能夠決定是否將事件轉發到組件對象
Qt--Qt中的事件處理
基本的代碼實現
Qt--Qt中的事件處理
小結
1.Qt事件和信號不同
2.事件由QObject的對象進行處理
3.信號由QObject對象觸發
4.重寫事件處理函數可能該變程序行為
5.信號的觸發不會對程序行為造成影響
6.事件處理實在實際工程開發中的應用非常普遍

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宁河县| 淄博市| 松江区| 长葛市| 巩留县| 乐安县| 沽源县| 崇义县| 玛多县| 淮阳县| 延长县| 青铜峡市| 彭山县| 仙居县| 衡阳市| 于田县| 吉林市| 白山市| 凤凰县| 灵宝市| 木兰县| 营口市| 磴口县| 海盐县| 桐柏县| 兴安盟| 乌兰县| 化州市| 朝阳县| 健康| 丹凤县| 涞水县| 沁阳市| 禄劝| 新化县| 台南县| 湛江市| 三原县| 金门县| 博客| 铅山县|