Qt實現鼠標拖動窗口

Qt實現鼠標拖動窗口

  • 1、設置窗口無邊框
  • 2、重寫鼠標點擊,移動函數
    • 2.1添加頭文件
    • 2.2 重寫函數
    • 2.3 添加定義
  • 3、定義一個偏移值
  • 4、判斷鼠標左鍵是否按下并計算偏移值
  • 5、移動窗口
  • 6、.h文件和.cpp文件
    • 6.1 .h文件
    • 6.2 .cpp文件
  • 7、總結

1、設置窗口無邊框

this->setWindowFlag(Qt::FramelessWindowHint);        //設置窗口無邊框

2、重寫鼠標點擊,移動函數

2.1添加頭文件

在這里插入圖片描述

2.2 重寫函數

在這里插入圖片描述

2.3 添加定義

//鼠標移動事件
void wearherMainInterface::mouseMoveEvent(QMouseEvent *event)
{}

3、定義一個偏移值

在這里插入圖片描述

4、判斷鼠標左鍵是否按下并計算偏移值

//鼠標點擊事件
void wearherMainInterface::mousePressEvent(QMouseEvent *event)
{//判斷右鍵是否按下if(event->button() == Qt::RightButton){quitMenu->exec(QCursor::pos());           //當前鼠標位置顯示菜單}//判斷左鍵是否按下if(event->button() == Qt::LeftButton){}
}

5、移動窗口

//鼠標移動事件
void wearherMainInterface::mouseMoveEvent(QMouseEvent *event)
{this->move(event->globalPos() - moffset);       //移動窗口
}

6、.h文件和.cpp文件

6.1 .h文件

#ifndef WEARHERMAININTERFACE_H
#define WEARHERMAININTERFACE_H#include <QWidget>
#include <QMouseEvent>
#include <QMenu>
#include <QAction>
#include <QMessageBox>namespace Ui {
class wearherMainInterface;
}class wearherMainInterface : public QWidget
{Q_OBJECTpublic:explicit wearherMainInterface(QWidget *parent = nullptr);~wearherMainInterface();protected:void mousePressEvent(QMouseEvent *event) override;          //重寫鼠標點擊事件void mouseMoveEvent(QMouseEvent *event) override;           //重寫鼠標移動事件private slots:void on_quitPushButton_clicked();               //退出按鈕void quitMenuTriggered();                       //菜單被觸發后處理槽函數private:Ui::wearherMainInterface *ui;QMenu *quitMenu;            //創建退出菜單指針QPoint moffset;             //鼠標與窗口左上角的偏移值};#endif // WEARHERMAININTERFACE_H

6.2 .cpp文件

#include "wearhermaininterface.h"
#include "ui_wearhermaininterface.h"wearherMainInterface::wearherMainInterface(QWidget *parent) :QWidget(parent),ui(new Ui::wearherMainInterface)
{ui->setupUi(this);this->setWindowFlag(Qt::FramelessWindowHint);           //去邊框
//    this->setAttribute(Qt::WA_TranslucentBackground);       //半透明背景quitMenu = new QMenu(this);     //創建菜單對象QAction *quitAction = new QAction(QIcon(":/widdgetMainInterface/exit.png"),"退出",this);quitMenu->addAction(quitAction);             //菜單添加動作對象//連接菜單被觸發的信號與槽connect(quitMenu,&QMenu::triggered,this,&wearherMainInterface::quitMenuTriggered);}wearherMainInterface::~wearherMainInterface()
{delete ui;
}//鼠標點擊事件
void wearherMainInterface::mousePressEvent(QMouseEvent *event)
{//判斷右鍵是否按下if(event->button() == Qt::RightButton){quitMenu->exec(QCursor::pos());           //當前鼠標位置顯示菜單}//判斷左鍵是否按下//當前鼠標位置        event->globalPos()//當前窗口位置        this->pos()if(event->button() == Qt::LeftButton){moffset = event->globalPos() - this->pos();  //當前鼠標位置減去當前窗口位置得到偏移值}
}//鼠標移動事件
void wearherMainInterface::mouseMoveEvent(QMouseEvent *event)
{this->move(event->globalPos() - moffset);       //移動窗口
}//退出按鈕
void wearherMainInterface::on_quitPushButton_clicked()
{QMessageBox quitMes;                        //創建退出彈窗對象quitMes.setWindowTitle("關閉界面");          //彈窗標題quitMes.setWindowIcon(QIcon(":/widdgetMainInterface/MesPanda.png"));        //設置窗口圖標quitMes.setIcon(QMessageBox::Warning);      //彈窗圖片quitMes.setText("是否關閉彈窗");              //彈窗文本quitMes.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);      //設置Ok和Cancle兩個按鈕quitMes.setButtonText(QMessageBox::Ok, "確認");           //Ok改為確認quitMes.setButtonText(QMessageBox::Cancel,"取消");        //Cancle改為取消int result = quitMes.exec();       //顯示信息框等待用戶交互//如果用戶選擇了Okif(result == QMessageBox::Ok){this->close();          //關閉主界面}else    //用戶取消什么都不做{}
}//菜單被觸發后槽函數
void wearherMainInterface::quitMenuTriggered()
{QMessageBox quitMes;                        //創建退出彈窗對象quitMes.setWindowTitle("關閉界面");          //彈窗標題quitMes.setWindowIcon(QIcon(":/widdgetMainInterface/MesPanda.png"));        //設置窗口圖標quitMes.setIcon(QMessageBox::Warning);      //彈窗圖片quitMes.setText("是否關閉彈窗");              //彈窗文本quitMes.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);      //設置Ok和Cancle兩個按鈕quitMes.setButtonText(QMessageBox::Ok, "確認");           //Ok改為確認quitMes.setButtonText(QMessageBox::Cancel,"取消");        //Cancle改為取消int result = quitMes.exec();       //顯示信息框等待用戶交互//如果用戶選擇了Okif(result == QMessageBox::Ok){this->close();          //關閉界面}else    //用戶取消什么都不做{}
}

7、總結

以上就是Qt實現鼠標拖動窗口的整個過程了,瀏覽過程中,如若發現錯誤,歡迎大家指

正,有問題的可以評論區留言或者私信。.h文件和.cpp文件中還有一些別的功能,大家

可以選擇性參考 最后,如果大家覺得有所幫助的話,可以點個贊,謝謝大家!夢雖遙,

追則能達;愿雖艱,持則可圓!

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

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

相關文章

MDX語言的數論算法

MDX語言的數論算法探討 引言 數論作為數學的一個重要分支&#xff0c;主要研究整數及其性質。在計算機科學和信息技術領域&#xff0c;數論算法被廣泛應用于密碼學、算法設計、數據加密等領域。MDX&#xff08;Multi-Dimensional Expressions&#xff09;語言&#xff0c;雖然…

【學Rust寫CAD】34 精確 Alpha 混合函數(argb.rs補充方法)

源碼 #[inline]pub fn over_exact(self, dst: Argb) -> Argb {let a 255 - self.alpha32();let t dst.rb() * a 0x80_00_80;let mut rb (t ((t >> 8) & Argb::MASK)) >> 8;rb & Argb::MASK;rb self.rb();// saturaterb | 0x1000100 - ((rb >&…

2025-04-06 NO.2 Quest3 基礎配置與打包

文章目錄 1 場景配置1.1 開啟手勢支持1.2 創建 OVRCameraRig1.3 創建可交互 Cube 2 打包配置 環境&#xff1a; Windows 11Unity6000.0.42f1 Quest3 開發環境配置見 2025-03-17 NO.1 Quest3 開發環境配置教程_quest3 unity 開發流程-CSDN博客。 1 場景配置 1.1 開啟手勢支持 …

LabVIEW提升程序響應速度

LabVIEW 程序在不同計算機上的響應速度可能存在較大差異&#xff0c;這通常由兩方面因素決定&#xff1a;計算機硬件性能和程序本身的優化程度。本文將分別從硬件配置對程序運行的影響以及代碼優化方法進行詳細分析&#xff0c;幫助提升 LabVIEW 程序的執行效率。 一、計算機硬…

Matlab:三維繪圖

目錄 1.三維曲線繪圖命令&#xff1a;plot3 實例——繪制空間直線 實例——繪制三角曲線 2.三維曲線繪圖命令&#xff1a;explot3 3.三維網格命令&#xff1a;mesh 實例——繪制網格面 實例——繪制山峰曲面 實例——繪制函數曲線 1.三維曲線繪圖命令&#xff1a;plot3 …

微信小程序基于Canvas實現頭像圖片裁剪(上)

序言 嘿&#xff0c;打工人混跡職場這么久&#xff0c;圖片處理肯定都沒少碰。不過咱說實話&#xff0c;大部分時候都是直接 “抄近道”&#xff0c;用現成的三方組件&#x1f60f;。就像我&#xff0c;主打一個會用工具&#xff0c;畢竟善用工具可是咱人類的 “超能力”&…

[特殊字符] 使用 Handsontable 構建一個支持 Excel 公式計算的動態表格

在 Web 應用中&#xff0c;處理表格數據并提供 Excel 級的功能&#xff08;如公式計算、數據導入導出&#xff09;一直是個挑戰。今天&#xff0c;我將帶你使用 React Handsontable 搭建一個強大的 Excel 風格表格&#xff0c;支持 公式計算、Excel 文件導入導出&#xff0c;并…

0302useState-hooks-react-仿低代碼平臺項目

文章目錄 1 useState1.1 說明返回 1.2 示例1.3 數據類型 2 state2.1 概述2.2 state特點 3 state重構問卷4 immer結語 1 useState useState 是一個 React Hook&#xff0c;它允許你向組件添加一個 狀態變量。 1.1 說明 語法 const [state, setState] useState(initialState…

前端實現單點登錄(SSO)的方案

概念&#xff1a;單點登錄&#xff08;Single Sign-On, SSO&#xff09;主要是在多個系統、多個瀏覽器或多個標簽頁之間共享登錄狀態&#xff0c;保證用戶只需登錄一次&#xff0c;就能訪問多個關聯應用&#xff0c;而不需要重復登錄。 &#x1f4a1; 方案分類 1. 前端級別 SS…

zabbix監控網站(nginx、redis、mysql)

目錄 前提準備&#xff1a; zabbix-server主機配置&#xff1a; 1. 安裝數據庫 nginx主機配置&#xff1a; 1. 安裝nginx redis主機配置&#xff1a; 1. 安裝redis mysql主機配置&#xff1a; 1. 安裝數據庫 zabbix-server&#xff1a; 1. 安裝zabbix 2. 編輯配置文…

無人機等非合作目標公開數據集2025.4.3

一.無人機遙感數據概述 1.1 定義與特點 在遙感技術的不斷發展中&#xff0c;無人機遙感數據作為一種新興的數據源&#xff0c;正逐漸嶄露頭角。它是通過無人駕駛飛行器&#xff08;UAV&#xff09;搭載各種傳感器獲取的地理空間信息&#xff0c;具有 覆蓋范圍大、綜合精度高、…

大數據時代的隱私保護:區塊鏈技術的創新應用

一、引言 在當今數字化時代&#xff0c;大數據已經成為推動社會發展的關鍵力量。從商業決策到社會治理&#xff0c;從醫療健康到金融服務&#xff0c;數據的價值日益凸顯。然而&#xff0c;隨著數據的大量收集和廣泛使用&#xff0c;隱私保護問題也日益突出。如何在充分利用大…

LeetCode 2442:統計反轉后的不同整數數量

目錄 核心思想&#xff1a;數字的“拆分”與“重組” 分步拆解&#xff08;以輸入 123 為例&#xff09; 關鍵操作詳解 為什么能處理中間或末尾的0&#xff1f; 數學本質 總結 題目描述 解題思路 代碼實現 代碼解析 復雜度分析 示例演示 總結 核心思想&#xff1a;…

Python爬蟲第3節-會話、Cookies及代理的基本原理

目錄 一、會話和Cookies 1.1 靜態網頁和動態網頁 1.2 無狀態HTTP 1.3 常見誤區 二、代理的基本原理 2.1 基本原理 2.2 代理的作用 2.3 爬蟲代理 2.4 代理分類 2.5 常見代理設置 一、會話和Cookies 大家在瀏覽網站過程中&#xff0c;肯定經常遇到需要登錄的場景。有些…

Flutter項目之登錄注冊功能實現

目錄&#xff1a; 1、頁面效果2、登錄兩種狀態界面3、中間按鈕部分4、廣告區域5、最新資訊6、登錄注冊頁聯調6.1、網絡請求工具類6.2、注冊頁聯調6.3、登錄問題分析6.4、本地緩存6.5、共享token6.6、登錄頁聯調6.7、退出登錄 1、頁面效果 import package:flutter/material.dart…

木馬學習記錄

一句話木馬是什么 一句話木馬就是僅需要一行代碼的木馬&#xff0c;很簡短且簡單&#xff0c;木馬的函數將會執行我們發送的命令 如何發送命令&#xff06;發送的命令如何執行? 有三種方式&#xff1a;GET&#xff0c;POST&#xff0c;COOKIE&#xff0c;一句話木馬中用$_G…

(C語言)單鏈表(1.0)(單鏈表教程)(數據結構,指針)

目錄 1. 什么是單鏈表&#xff1f; 2. 單鏈表的代碼表示 3. 單鏈表的基本操作 3.1 初始化鏈表 3.2 插入結點&#xff08;頭插法&#xff09; 3.3 插入結點&#xff08;尾插法&#xff09; 3.4 遍歷鏈表 4. 單鏈表的優缺點 代碼&#xff1a;*L(LinkList)malloc(sizeof(…

Sentinel-自定義資源實現流控和異常處理

目錄 使用SphU的API實現自定義資源 BlockException 使用SentinelResource注解定義資源 SentinelResourceAspect 使用Sentinel實現限流降級等效果通常需要先把需要保護的資源定義好&#xff0c;之后再基于定義好的資源為其配置限流降級等規則。 Sentinel對于主流框架&#…

Linux信號處理解析:從入門到實戰

Linux信號處理全解析&#xff1a;從入門到實戰 一、初識Linux信號&#xff1a;系統級的"緊急電話" 信號是什么&#xff1f; 信號是Linux系統中進程間通信的"緊急通知"&#xff0c;如同現實中的交通信號燈。當用戶按下CtrlC&#xff08;產生SIGINT信號&…

Java的Selenium的特殊元素操作與定位之select下拉框

如果頁面元素是一個下拉框&#xff0c;我們可以將此web元素封裝為Select對象 Select selectnew Select(WebElement element); Select對象常用api select.getOptions();//獲取所有選項select.selectBylndex(index);//根據索引選中對應的元素select.selectByValue(value);//選…