国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Qt/QtCreator:主動觸發(fā)鼠標或鍵盤事件QMouseEvent與QKeyEvent

這篇具有很好參考價值的文章主要介紹了Qt/QtCreator:主動觸發(fā)鼠標或鍵盤事件QMouseEvent與QKeyEvent。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

方法:

????????構(gòu)造QMouseEvent或QKeyEvent,使用QApplication::sendEvent或postEvent進行投送事件? ? 。

????????QApplication::sendEvent()和QApplication::postEvent()都是Qt中用于發(fā)送事件的函數(shù),它們之間的區(qū)別在于事件的處理方式。

????????QApplication::sendEvent(target, event)是直接將事件event發(fā)送給目標target,并阻塞當前線程等待目標處理完事件后再繼續(xù)執(zhí)行,這個過程類似于一個同步調(diào)用。
????????QApplication::postEvent(target, event)則是將事件event放入目標target的事件隊列中,并立即返回,在目標及其父級窗口的事件循環(huán)下一次輪詢時會取出該事件進行處理。這個過程類似于一個異步調(diào)用。
????????因此,使用QApplication::postEvent()能夠避免當前線程等待目標窗口處理事件而被阻塞的情況,可以提高程序的響應(yīng)性。但也需要注意的是,由于QApplication::postEvent()是基于事件循環(huán)的機制進行處理的,所以它并不是實時的,可能會存在一定的延遲。如果需要立即處理事件并等待結(jié)果,則應(yīng)該使用QApplication::sendEvent()。

以下是在MainWindow實現(xiàn)的,主動觸發(fā)、接收QMouseEvent及QKeyEvent的示例:文章來源地址http://www.zghlxwxcb.cn/news/detail-552905.html

//MainWindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMouseEvent>
#include <QKeyEvent>
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);

    void mousePressEvent(QMouseEvent* )override;
    void keyPressEvent(QKeyEvent* )override;

    ~MainWindow();
protected:
    void sendMouseEvent();
    void sendKeyEvent();
private:
    bool currentMouseEvent {false};
};

#endif // MAINWINDOW_H
//MainWindow.cpp

#include "mainwindow.h"
#include <QApplication>
#include <QDebug>
#include <QTimer>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{    
    QTimer* timer = new QTimer(this);
    timer->start(1000);

    connect(timer,&QTimer::timeout,this,[=]{
        if(currentMouseEvent)
        {
            this->sendKeyEvent();
            currentMouseEvent = false;
        }
        else {
            currentMouseEvent = true;
            this->sendMouseEvent();
        }
    });
}

MainWindow::~MainWindow()
{

}

//鼠標事件
void MainWindow::mousePressEvent(QMouseEvent *eve)
{
    if(eve->button() == Qt::LeftButton)
        qDebug()<<"鼠標左鍵點擊";
    QMainWindow::mousePressEvent(eve);
}

//鍵盤事件
void MainWindow::keyPressEvent(QKeyEvent *eve)
{
    if(eve->key() == Qt::Key_Enter)
        qDebug()<<"鍵盤回車按下";
    QMainWindow::keyPressEvent(eve);
}

//手動觸發(fā)鍵盤事件
void MainWindow::sendKeyEvent(){
    QKeyEvent *event = new QKeyEvent(QEvent::KeyPress,
                                      Qt::Key_Enter,
                                      Qt::NoModifier,
                                      "");

    QApplication::postEvent(this, event);
}

//手動觸發(fā)鼠標事件
void MainWindow::sendMouseEvent()
{
    QMouseEvent *event = new QMouseEvent(QEvent::MouseButtonPress,
                                          QPointF(width()/2, height()/2),
                                          Qt::LeftButton,
                                          Qt::LeftButton,
                                          Qt::NoModifier);

    QApplication::postEvent(this, event);
}

到了這里,關(guān)于Qt/QtCreator:主動觸發(fā)鼠標或鍵盤事件QMouseEvent與QKeyEvent的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【Qt圖形視圖框架】自定義QGraphicsItem和QGraphicsView,實現(xiàn)鼠標(移動、縮放)及鍵盤事件、右鍵事件

    說明 在使用Qt的圖形視圖框架實現(xiàn)功能時,一般會在其基礎(chǔ)上進行自定義功能實現(xiàn)。 如:滾輪對場景的縮放,鼠標拖動場景中的項,以及可以在場景中進行右鍵操作等。 示例 myitem 為自定義QGraphicsItem,實現(xiàn)了邊框、重繪事件、鼠標懸停、按鍵、右鍵菜單等功能。 myitem.h myi

    2024年02月04日
    瀏覽(32)
  • JavaScript 鼠標事件監(jiān)聽&&觸發(fā)時機&&觸發(fā)順序

    JavaScript 鼠標事件監(jiān)聽&&觸發(fā)時機&&觸發(fā)順序

    有時間整理下鼠標的監(jiān)聽事件,目前匯總到的鼠標監(jiān)聽事件以下10個: 目錄 1. click 2. dblclick 3.contextmenu 4.mousedown 5.mouseup 6.mouseenter 7.mouseleave 8.mouseover 9.mouseout 10.mousemove 先說下觸發(fā)時機和作用鍵(左鍵、右鍵) 點擊事件,只有左鍵生效 雙擊事件,只有左鍵生效 跟click事件對比

    2024年02月08日
    瀏覽(29)
  • 基于MFC的鍵盤響應(yīng)(熱鍵觸發(fā)事件)

    通過輸入 CTRL + G 組合按鍵完成文件選擇框彈出: 目標: 按下 CTRL + G ,彈出文件選擇框 過程: 頭文件添加消息申明 cpp文件添加消息映射 OnInitDialog添加全局熱鍵注冊 實現(xiàn)熱鍵功能函數(shù) MFC鍵盤宏定義: 功能鍵: VK_TAB : Tab鍵。 VK_SPACE : 空格鍵。 VK_BACK : 退格鍵(回退鍵)。

    2024年02月04日
    瀏覽(17)
  • 【Unity功能】鼠標移動觸發(fā)事件方法

    【Unity功能】鼠標移動觸發(fā)事件方法

    ?方法一:方法觸發(fā) 注意:UGUI不能使用該方法 方法二:Event Trigger 注意:需要場景中包含EventSystem(在添加trigger組件后自動添加);UGUI可以使用 方法三:

    2024年01月25日
    瀏覽(19)
  • vue2:鼠標觸發(fā)各類事件

    移動端 pc端 template javascript 如何獲取鼠標的x,y坐標 這就要利用事件回調(diào)中的?e.targetTouches?屬性了。 如何獲取鼠標每次移動的差值 當鼠標移動時,如何計算得出,當前鼠標位置與上一次鼠標位置的差值呢? 例如,當前鼠標位置為(1,2),上一次鼠標位置為(0,0),差值就是: x:1,

    2024年04月13日
    瀏覽(26)
  • vue 項目中使用鍵盤回車按鍵觸發(fā)事件

    我最近項目要求按下enter鍵就登錄或者注冊之類的觸發(fā),我不知道為什么用vue的 @click.enter這樣的不管用,到現(xiàn)在都沒整明白為啥,希望知道的給講解一下. 我看了半天人家是給頁面加了一個監(jiān)聽 然后在methods里面加上一個方法,監(jiān)聽這個方法,e.keyCode 是每個按鍵的編碼,13是回車鍵

    2024年02月11日
    瀏覽(18)
  • vue 項目中使用鍵盤回車或空格按鍵觸發(fā)事件

    話不多說上代碼?。?! 一開始以為很復(fù)雜,經(jīng)過一番摸索和查找,發(fā)現(xiàn)也沒有那么難,具體如下: 1、先在 created 里邊開啟鍵盤按鍵的監(jiān)聽事件,如下: 2、在 methods 里邊添加按鍵之后需要執(zhí)行的方法即可,具體如下: 解析:e.keyCode 是每個按鍵的編碼,13是回車鍵,32是空格

    2024年02月11日
    瀏覽(17)
  • [pyqt5]觸發(fā)ctrl+鼠標滾輪事件

    有時候我們需要按住Ctrl+鼠標滾輪實現(xiàn)圖像放大或者縮小,因此需要這個事件,具體看代碼

    2024年02月13日
    瀏覽(34)
  • JS 鼠標事件與鍵盤事件

    一、鼠標事件 ????????onclick ? ? ? ?鼠標點擊左鍵觸發(fā) ????????onmouseover ? ?鼠標經(jīng)過觸發(fā) ????????onmouseout ? ? 鼠標離開觸發(fā) ????????onfocus ? ? ? ?獲得鼠標焦點觸發(fā) ????????onblur ? ? ? ? 失去鼠標焦點觸發(fā) ????????onmousemove ? ?鼠標移動出發(fā) ???

    2024年02月09日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包