1. 程式人生 > >Qt事件總結(滑鼠、鍵盤)

Qt事件總結(滑鼠、鍵盤)

Qt 程式需要在main()函式建立一個QCoreApplication物件,然後呼叫它的exec()函式。這個函式就是開始 Qt 的事件迴圈。在執行

exec()函式之後,程式將進入事件迴圈來監聽應用程式的事件。當事件發生時,Qt 將建立一個事件物件。Qt 中所有事件類都繼承於

QEvent。在事件物件建立完畢後,Qt 將這個事件物件傳遞給QObject的event()函式。event()函式並不直接處理事件,而是將這些事件對

象按照它們不同的型別,分發給不同的事件處理器(event handler)。

如上所述,event()函式主要用於事件的分發。所以,如果你希望在事件分發之前做一些操作,就可以重寫這個event()函數了。

滑鼠事件


    void mousePressEvent(QMouseEvent *event);        //單擊
    void mouseReleaseEvent(QMouseEvent *event);      //釋放
    void mouseDoubleClickEvent(QMouseEvent *event);  //雙擊
    void mouseMoveEvent(QMouseEvent *event);         //移動
    void wheelEvent(QWheelEvent *event);             //滑輪
滑鼠事件使用的時候,加標頭檔案


#include <QMouseEvent>

  ···
// 滑鼠按下事件
void Widget::mousePressEvent(QMouseEvent *event)
{
    // 如果是滑鼠左鍵按下   改變指標形狀,並且儲存當前指標位置與視窗位置的差值。
    if(event->button() == Qt::LeftButton){
        ···
    }
    // 如果是滑鼠右鍵按下
    else if(event->button() == Qt::RightButton){
       ···
    }
}
// 滑鼠移動事件       預設情況下,觸發事件需要點選一下,才能觸發。可設定為自動觸發:setMouseTracking(true); 
void Widget::mouseMoveEvent(QMouseEvent *event)
{
    // 這裡必須使用buttons()
    if(event->buttons() & Qt::LeftButton){  //進行的按位與
       ···
    }
}
// 滑鼠釋放事件
void Widget::mouseReleaseEvent(QMouseEvent *event)
{
   ···
}
// 滑鼠雙擊事件
void Widget::mouseDoubleClickEvent(QMouseEvent *event)
{
    // 如果是滑鼠左鍵按下
    if(event->button() == Qt::LeftButton){
      
        ···
    }
}
// 滾輪事件
void Widget::wheelEvent(QWheelEvent *event)
{
    // 當滾輪遠離使用者時
    if(event->delta() > 0){
        ···
    }else{//當滾輪向使用者方向旋轉時
        ···
    }
}

鍵盤事件


    void keyPressEvent(QKeyEvent *event);
    void keyReleaseEvent(QKeyEvent *event);
鍵盤事件使用時,加標頭檔案

#include <QKeyEvent>

// 鍵盤按下事件
void Widget::keyPressEvent(QKeyEvent *event)
{
    // 是否按下Ctrl鍵      特殊按鍵
    if(event->modifiers() == Qt::ControlModifier){
        // 是否按下M鍵    普通按鍵  類似
        if(event->key() == Qt::Key_M)
            ···
    }
    else QWidget::keyPressEvent(event);   //儲存預設事件

    //如果是處理兩個普通按鍵,得避免自動重複,釋放中也要處理
    if(event->key() == Qt::Key_Up){
        // 按鍵重複時不做處理
        if(event->isAutoRepeat()) return;
        // 標記向上方向鍵已經按下
        keyUp = true;
    }else if(event->key() == Qt::Key_Left){
        if(event->isAutoRepeat()) return;
        keyLeft = true;
    }

}
// 按鍵釋放事件
void Widget::keyReleaseEvent(QKeyEvent *event)
{
    ···
    
    //如果是處理兩個普通按鍵,得避免自動重複
   if(event->key() == Qt::Key_Up){
        if(event->isAutoRepeat()) return;
 
     ···       
       
    }
    else if(event->key() == Qt::Key_Left){
        if(event->isAutoRepeat()) return;
       ···
      
   }

}

查閱文件,QT已經實現了這一系列的鍵盤事件

void QWidget::keyPressEvent(QKeyEvent *event)   //鍵盤按下事件
void QWidget::keyReleaseEvent(QKeyEvent *event) //鍵盤松開事件
這樣兩個都基本上能夠滿足一般的需求了,但是前提是已經獲得焦點的控制元件已經獲取焦點。具體怎麼使用呢?

在控制元件的標頭檔案.h中進行宣告:

protected:
    virtual void keyPressEvent(QKeyEvent *ev);
    virtual void keyReleaseEvent(QKeyEvent *ev);
在.cpp中進行實現相應的功能:

void MainForm::keyPressEvent(QKeyEvent *ev)
{
    if(ev->key() == Qt::Key_F5)
    {
       ui->stackedWidget->reloadPage();
       return;
    }
 
    QWidget::keyPressEvent(ev);
}
 
void MainForm::keyReleaseEvent(QKeyEvent *ev)
{
    if(ev->key() == Qt::Key_F5)
    {
       ui->stackedWidget->reloadPage();
       return;
    }
 
    QWidget::keyReleaseEvent(ev);
}
    在一些程式中,我們發現這樣並不好使,怎麼回事呢?

    這時候可以試試在建構函式中新增這個函式,使其具有捕獲鍵盤事件的能力:

this->grabKeyboard();
 

相關推薦

Qt事件總結(滑鼠鍵盤)

Qt 程式需要在main()函式建立一個QCoreApplication物件,然後呼叫它的exec()函式。這個函式就是開始 Qt 的事件迴圈。在執行 exec()函式之後,程式將進入事件迴圈來監聽應用程式的事件。當事件發生時,Qt 將建立一個事件物件。Qt 中所有事件類都

JS中的事件滑鼠鍵盤HTML事件

<body> <div> <img class="a" src="../../img/new_01" alt=""> <img class="a" src="../../img/new_02"

【mfc】滑鼠鍵盤響應事件

對於mfc這東西,你真的必要跟我扯一大堆怎麼類,什麼派生,什麼鬼東西 告訴我怎麼做出一個個小功能,我記住它就可以了 這期為大家帶來MFC的滑鼠響應事件 這也是所謂的MFC中的“訊息對映事件” 一、基本目標 1、有一個基本的MFC程式,點選“關閉”則“關閉”這個程式,這點沒

python Tkinter圖形使用者介面元件(滑鼠鍵盤事件)

<KeyPress>  按下任意的鍵 <KeyRelease>   鬆開任意鍵 <KeyPress-key>,<KeyRelease-key>  按下或者鬆開key <Key>,<Key-key> 分別是<KeyPress>,

OpenGL(十六) 滑鼠鍵盤互動響應事件

OpenGL中通過滑鼠和鍵盤跟程式互動的實現需要實現註冊滑鼠和鍵盤響應事件,在一定條件下,該事件被觸發,事件裡的程式被執行,達到互動的目的。 通過glutMouseFunc(&OnMouse)註冊滑鼠事件,OnMouse是滑鼠事件的響應,函式格式是void OnM

jQuery——事件篇( 滑鼠表單鍵盤事件繫結和解綁事件物件自定義事件)

滑鼠事件 click()與dbclick()事件 <!--方法1--> <div id="test">點選觸發<div> $("ele").click(function(){ alert('觸發指定事件')

Qt之股票元件-股票檢索--支援搜尋結果預覽滑鼠鍵盤操作

目錄 一、感慨一下 二、效果展示 三、搜尋編輯框 1、編輯框 2、預覽框 四、相關文章 原文連結:Qt之股票元件-股票檢索--支

17.QT-事件處理分析事件過濾器拖放事件

期待 使用 lis 相關 事件處理 [] 支持 實現 endif Qt事件處理介紹 Qt平臺會將系統產生的消息轉換為Qt事件 Qt事件是一個QEvent的對象 Qt事件用來描述程序內部或外部發生的動作 任意的QObject對象都具備事件處理的能力 Qt常見

OpenGL實驗二 利用滑鼠鍵盤,選單等方式對圖元進行互動操作

實驗目的: 利用滑鼠、鍵盤,選單等方式對圖元進行互動操作   實驗內容: 1、用滑鼠拖動畫直線,線段終點始終跟隨滑鼠移動; 2、使用選單介面修改直線的顏色; 3、利用鍵盤控制直線在螢幕上移動;   可以改進的設想: 1.做一

WebDriver滑鼠鍵盤操作

1. 滑鼠事件 說明:WebDriver庫對模擬滑鼠操作封裝的一些方法,此知識點作為了解 WebDriver操作滑鼠方法 說明:在WebDriver中將操作滑鼠的方法封裝在ActionChains類中 1. context_click() 右擊 --> 此方

selenium+Python常用webdriverAPI:控制瀏覽器滑鼠鍵盤等操作

繼續講解selenium webdriver 4種滑鼠事件(右擊、雙擊、拖動、滑鼠懸停)、鍵盤事件(各種快捷鍵)、用js控制瀏覽器滾動條位置、獲取cookie的方法 前提:已經搭建好selenium+python環境 一、滑鼠事件 首先,在指令碼中除了要匯入webdriver類外,還要引入A

C++實現滑鼠控制 封裝常見的模擬滑鼠鍵盤的操作函式

API 或 MFC 視窗程式 裡 有 函式, 例如 API 函式 設位置: BOOL SetCursorPos( int x, int y); 引數是螢幕座標x,y 標頭檔案 Winuser.h 連結庫 #pragma comment (lib, "User32.lib") 或取位

剖析Qt 事件的產生分發接受處理流程

Windows上Qt事件處理機制詳解: 1、誰來產生事件: 最容易想到的是我們的輸入裝置,比如鍵盤、滑鼠產生的 keyPressEvent,keyReleaseEvent,mousePressEvent,mouseReleaseEvent事件(他們被封裝成QMouse

重灌win7後,所有USB介面無法使用(滑鼠鍵盤U盤)

今天給一朋友重灌系統,華碩FX50J,修改BIOS重灌了win7,結果所有USB介面均無法使用,滑鼠鍵盤U盤都成了擺設,再次重灌還是如此,恢復BIOS依舊沒用。 打了兩次華碩技術客服,第二個客服總

如何在C#中使用全域性滑鼠鍵盤Hook

{                    case WM_LBUTTONDOWN:                        //case WM_LBUTTONUP:                         //case WM_LBUTTONDBLCLK:                     

React 事件對象鍵盤事件表單事件ref獲取dom節點react實現類似Vue雙向數據綁定

nbsp 產生 影響 () button stat tin cto 屬性 1、案例實現代碼 import React, { Component } from ‘react‘; /** * 事件對象、鍵盤事件、表單事件、ref獲取dom節點、react實現類似Vue雙向

前端(十五)—— JavaScript事件:繫結事件方式事件的冒泡和預設事件滑鼠事件鍵盤事件表單 事件文件事件圖片事件頁面事件

JS事件:繫結事件方式、事件的冒泡和預設事件、滑鼠事件、鍵盤事件、表單 事件、文件事件、圖片事件、頁面事件 一、事件的兩種繫結方式 ******* 1、on事件繫結方式 document.onclick = function() { console.log("文件點選"); } // on事件只

瀏覽器滑塊滑鼠事件滑鼠滑輪鍵盤事件詳細說明

滑鼠滑輪 必須是在 mousewheel 事件中 註冊事件   window.addEventListener(“mousewheel ”,function(){}); event.deltaY   獲取滑輪沒一格滑動的畫素,正負表示變化趨勢,正增加 event.whee

【PyQt5-Qt Designer】滑鼠+鍵盤事件

重定義滑鼠響應+鍵盤響應事件 一,每個事件都被封裝成相應的類: pyqt中,每個事件型別都被封裝成相應的事件類,如滑鼠事件為QMouseEvent,鍵盤事件為QKeyEvent等。而它們的基類是QEvent。 二,基類QEvent的幾個重要方法: accept() 表示事件已處理,不需要向父視窗傳播

Js-三大事件滑鼠事件鍵盤事件html事件

滑鼠事件 click:單擊 dblclick:雙擊 mousedown:滑鼠按下 mouseup:滑鼠擡起 mouseover:滑鼠懸浮 mouseout:滑鼠離開 mousemove:滑鼠移動 mo