Qt 基礎組件速學 鼠標和鍵盤事件

學習目標: 鼠標事件和鍵盤事件應用

前置環境

運行環境:qt?creator 4.12

學習內容和效果演示:

1.鼠標事件

根據鼠標的坐標位置,做出對應的事件。

2.鍵盤事件

根據鍵盤的輸入做出對應操作

詳細主要代碼

1.鼠標事件

#include "mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{status = new QLabel("鼠標在當前窗口坐標為:");status->setFixedWidth(200);mouser = new QLabel("");mouser->setFixedWidth(200);statusBar()->addPermanentWidget(status);statusBar()->addPermanentWidget(mouser);this->setMouseTracking(true);resize(800,600);QImage *image=new QImage();if(!image->load("C:/Users/jbj/Pictures/test/IMG_5037.JPG")){QMessageBox::information(this,"失敗","加載圖片失敗,請重新檢查?");delete  image;return;}QLabel* imglabe = new QLabel(this);imglabe->setFixedSize(200,300);imglabe->setPixmap(QPixmap::fromImage(*image));
}MainWindow::~MainWindow()
{
}//鼠標移動時被調用
void MainWindow::mouseMoveEvent(QMouseEvent *e){mouser->setText("("+QString::number(e->x())+","+QString::number(e->y())+")");
}
//鼠標按下時被調用
void MainWindow::mousePressEvent(QMouseEvent *e){QString qstr="("+QString::number(e->x())+","+QString::number(e->y())+")";if(e->button()==Qt::LeftButton){statusBar()->showMessage("用戶已按下鼠標[左鍵]坐標"+qstr);}else if(e->button()==Qt::RightButton){statusBar()->showMessage("用戶已按下鼠標[右鍵]坐標"+qstr);}else if(e->button()==Qt::MidButton){statusBar()->showMessage("用戶已按下鼠標[中鍵]坐標"+qstr);}
}
//鼠標釋放時被調用
void MainWindow::mouseReleaseEvent(QMouseEvent *e){QString qstr="("+QString::number(e->x())+","+QString::number(e->y())+")";statusBar()->showMessage("用戶已釋放鼠標坐標"+qstr,20);
}

?2.鍵盤事件

這里用到了繪畫的知識點

畫板 Qpalette? ? 畫家 Qpainter? 鋼筆QPen

理解:畫師在畫板上做畫,會用到鋼筆,當要展現時,QPainter 負責將畫板呈現。

#include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent)
{setWindowTitle("鍵盤測試");setAutoFillBackground(true);//調色板QPalette pale =this->palette();pale.setColor(QPalette::Window,Qt::white);setPalette(pale);setMinimumSize(800,600);setMaximumSize(800,600);width=size().width();height=size().height();pix=new QPixmap(width,height);//畫板pix->fill(Qt::white);//實際物體main=new QPixmap(28,28);main->fill(Qt::red);sx=30;sy=30;step=30;Drawpinit();resize(800,600);
}
void Widget::Drawpinit(){pix->fill(Qt::white); // 清空QPainter* painter =new QPainter;//畫家QPen pen(Qt::DashDotLine);for (int i=step; i<width;i+=step) { //豎線painter->begin(pix); //選擇畫板painter->setPen(pen);painter->drawLine(QPoint(i,0),QPoint(i,height));painter->end();}for(int j=step;j<height;j=j+step) // 橫線{painter->begin(pix);     //選擇畫板painter->setPen(pen);painter->drawLine(QPoint(0,j),QPoint(width,j));painter->end();}painter->begin(pix);painter->drawPixmap(QPoint(sx,sy),*main);painter->end();
}void Widget::paintEvent(QPaintEvent *){QPainter painter;painter.begin(this);//將之前在 Drawpinit() 函數中繪制的 QPixmap 對象繪制到 Widget 的左上角(坐標 (0, 0))。painter.drawPixmap(QPoint(0,0),*pix);painter.end();}
void Widget::keyPressEvent(QKeyEvent *evt){sx=sx-sx%step;sy=sy-sy%step;//左右移動if(evt->key()==Qt::Key_Left){sx=(sx-step<0)?sx:sx-step;}if(evt->key()==Qt::Key_Right){sx=(sx+step+main->width() > width)?sx:sx+step;}if(evt->key()==Qt::Key_Up){sy=(sy-step<0)?sy:sy-step;}if(evt->key()==Qt::Key_Down){sy=(sy+step+main->height() >height)?sy:sy+step;}Drawpinit(); //重新設置參數update();   //觸發繪畫
}
Widget::~Widget()
{}

總結:

鍵盤事件:

????????void keyPressEvent(QKeyEvent *evt) //按下時被調用

鼠標事件:

? ? ? ? ? ?//鼠標移動時被調用
? ????????? void mouseMoveEvent(QMouseEvent *e);
? ? ????????//鼠標按下時被調用
? ? ????????void mousePressEvent(QMouseEvent *e);
? ? ????????//鼠標釋放時被調用
? ????????? void mouseReleaseEvent(QMouseEvent *e);

詳細開發則需查閱官方開發文檔。

最后附上源代碼鏈接
對您有幫助的話,幫忙點個star

26-mouserEvent · jbjnb/Qt demo - 碼云 - 開源中國 (gitee.com)

27-QkeyEvent · jbjnb/Qt demo - 碼云 - 開源中國 (gitee.com)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/40651.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/40651.shtml
英文地址,請注明出處:http://en.pswp.cn/web/40651.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

一文讀懂輕量日志收集系統Loki工作原理

Loki 是由 Grafana Labs 開發的日志聚合系統&#xff0c;設計目標是提供一種高效、低成本的日志收集和查詢解決方案。與傳統的日志系統&#xff08;如 ELK Stack&#xff09;不同&#xff0c;Loki 不會對日志內容進行索引&#xff0c;而是僅對日志的元數據進行索引&#xff0c;…

美國大帶寬服務器租用優勢和注意事項

美國大帶寬服務器租用對于需要處理大量數據和提供高速網絡服務的企業至關重要。下面將詳細討論美國大帶寬服務器租用的優勢、適用場景及注意事項&#xff0c;rak部落小編為您整理發布美國大帶寬服務器租用的優勢和注意事項。 優勢 1. 高速數據傳輸&#xff1a; - 大帶寬服務器提…

FTP、http 、tcp

HTTP VS FTP HTTP &#xff1a;HyperText Transfer Protocol 超文本傳輸協議&#xff0c;是基于TCP協議 FTP&#xff1a; File Transfer Protocol 文件傳輸協議&#xff0c; 基于TCP協議&#xff0c; 基于UDP協議的FTP 叫做 TFTP HTTP 協議 通過一個SOCKET連接傳輸依次會話數…

FIND_IN_SET使用案例--[sql語句根據多ids篩選出對應數據]

一 FIND_IN_SET select id,system_ids from intellect_client_info where FIND_IN_SET(5, system_ids) > 0;

Spring Boot 中的監視器是什么?有什么作用?

前言&#xff1a; 監聽器相信熟悉 Spring、Spring Boot 的都知道&#xff0c;但是監視器又是什么&#xff1f;估計很多人一臉懵的狀態&#xff0c;本篇分享一下 Spring Boot 的監視器。 Spring Boot 系列文章傳送門 Spring Boot 啟動流程源碼分析&#xff08;2&#xff09; …

Apache DolphinScheduler 與 AWS 的 EMR/Redshift 集成實踐分享

引言 這篇文章將給大家講解關于DolphinScheduler與AWS的EMR和Redshift的集成實踐&#xff0c;通過本文希望大家能更深入地了解AWS智能湖倉架構&#xff0c;以及DolphinScheduler在實際應用中的重要性。 AWS智能湖倉架構 首先&#xff0c;我們來看一下AWS經典的智能湖倉架構圖…

【第20章】MyBatis-Plus邏輯刪除支持

文章目錄 前言一、邏輯刪除的工作原理二、支持的數據類型三、使用方法1.配置全局邏輯刪除屬性2.在實體類中使用 TableLogic 注解 四、常見問題解答1. 如何處理插入操作&#xff1f;2. 刪除接口自動填充功能失效怎么辦&#xff1f; 五、實戰1. 全局配置2. 添加TableLogic3. 自動…

高考選專業,興趣與就業前景該如何平衡?

從高考結束的那一刻開始&#xff0c;有些家長和學生就已經變得焦慮了&#xff0c;因為他們不知道成績出來的時候學生應該如何填報志愿&#xff0c;也不知道選擇什么樣的專業&#xff0c;畢竟大學里面的專業豐富多彩&#xff0c;如何選擇確實是一門學問&#xff0c;而對于學生們…

Oracle的RECYCLEBIN回收站:輕松恢復誤刪對象

目錄 Oracle的RECYCLEBIN回收站&#xff1a;輕松恢復誤刪對象一、概念二、工作原理三、使用方法1 查看回收站中的對象2 恢復回收站中的對象2.1 恢復表&#xff08;TABLE&#xff09;2.2 恢復索引&#xff08;INDEX&#xff09;2.3 恢復視圖&#xff08;VIEW&#xff09;2.4 恢復…

樂清網站建設規劃書

樂清是位于浙江省溫州市的一個縣級市&#xff0c;擁有悠久的歷史和豐富的文化底蘊。隨著互聯網的快速發展&#xff0c;網站建設成為推動樂清經濟和文化發展的重要手段。因此&#xff0c;我們認為有必要制定一個全面的樂清網站建設規劃書&#xff0c;以促進樂清的經濟繁榮和文化…

東芝 TB5128FTG 強大性能的步進電機驅動器

TB5128FTG它以高精度和高效能為設計理念&#xff0c;采用 PWM 斬波方法&#xff0c;并內置時鐘解碼器。通過先進的 BiCD 工藝制造&#xff0c;這款驅動器提供高達 50V 和 5.0A 的輸出額定值&#xff0c;成為廣泛應用場景中的強勁解決方案。 主要特性 TB5128FTG 擁有眾多確保高…

SAP PS學習筆記01 - PS概述,創建Project和WBS

本章開始學習PS&#xff08;Project System&#xff09;。 1&#xff0c;PS的概述 PS&#xff08;Project System&#xff09;是SAP企業資源規劃系統中的一個關鍵模塊&#xff0c;主要用于項目管理。 它提供了一個全面的框架來規劃、控制和執行項目&#xff0c;涵蓋了從項目啟…

【Express】自定義錯誤碼和通用返回對象

自定義錯誤碼&#xff1a; // 自定義錯誤 const {formatResponse} require("./tool");class ServiceError extends Error {/**** param message 自定義錯誤信息* param code 自定義錯誤碼*/constructor(message, code) {super(message);this.code code;}/*** 將錯…

ZeroMQ最全面試題解讀(3萬字長文)

目錄 解釋ZeroMQ是什么,它的主要用途是什么? ZeroMQ支持哪些通信模式? 描述一下ZeroMQ中的“消息”和“消息幀” 如何在C++中初始化一個ZeroMQ上下文? 在ZeroMQ中,如何創建一個套接字并將其綁定到特定端口? 解釋什么是“管道模式”(Pipe Pattern) 說明如何使用Z…

Spring的三種注入方式的優缺點分析

在 Spring 中&#xff0c;提供了三種依賴注入&#xff08;也被稱之為 "對象注入"&#xff0c;"屬性裝配"等&#xff09;的方式&#xff0c;這篇博客我們來分析一下這三種方式各有哪些優缺點。 一、屬性注入 優點 簡潔&#xff0c;使用方便。 缺點 ? 只…

競賽選題 卷積神經網絡手寫字符識別 - 深度學習

文章目錄 0 前言1 簡介2 LeNet-5 模型的介紹2.1 結構解析2.2 C1層2.3 S2層S2層和C3層連接 2.4 F6與C5層 3 寫數字識別算法模型的構建3.1 輸入層設計3.2 激活函數的選取3.3 卷積層設計3.4 降采樣層3.5 輸出層設計 4 網絡模型的總體結構5 部分實現代碼6 在線手寫識別7 最后 0 前言…

C++內存的一些知識點

一、內存分區 在C中&#xff0c;內存主要分為以下幾個區域&#xff1a; 代碼區&#xff1a;存放函數體的二進制代碼。 全局/靜態存儲區&#xff1a;存放全局變量和靜態變量&#xff0c;這些變量在程序的整個運行期間都存在。常量存儲區&#xff1a;存放常量&#xff0c;這些值…

學懂C#編程:實用方法——string字符串指定連接符拼接之 string.Join 的詳細用法

在C#中&#xff0c;string.Join 方法用于將一個字符串數組或集合中的元素連接成一個單一的字符串&#xff0c;并在每個元素之間插入指定的分隔符。這個方法非常有用&#xff0c;特別是在需要將多個字符串合并成一個字符串時。以下是 string.Join 方法的詳細用法&#xff1a; 方…

WPF UI 界面布局 魔術棒 文字筆記識別 技能提升 布局功能擴展與自定義 繼承Panel的對象,測量與排列 系列七

應用開發第一步 功能分類&#xff1a;頁面上的功能區域劃分。。。。需求分析 業務邏輯 數據流 功能模塊 UI/UX 編碼 測試 發布 功能開發與布局 不用顯式的方式設定元素的尺寸 不使用屏幕坐標來指定位置 Grid 功能最強大&#xff0c;布局最靈活的容器…

卷積神經網絡:目標檢測的黃金鑰匙

標題&#xff1a;卷積神經網絡&#xff1a;目標檢測的黃金鑰匙 卷積神經網絡&#xff08;CNN&#xff09;是深度學習中用于處理具有網格結構數據&#xff08;如圖像&#xff09;的強大工具。在目標檢測任務中&#xff0c;CNN不僅提升了檢測的準確性&#xff0c;還極大地推動了…