首页 > 其他分享 >qt 窗口可拖动

qt 窗口可拖动

时间:2022-12-06 11:23:13浏览次数:68  
标签:窗口 qt 拖动 Frame QMouseEvent event ui QPoint void

参考:https://blog.csdn.net/qq_45254369/article/details/125878621

左键按住,拖动窗口

头文件:

#ifndef FRAME_H
#define FRAME_H

#include <QFrame>

namespace Ui {
class Frame;
}

class Frame : public QFrame
{
    Q_OBJECT

public:
    explicit Frame(QWidget *parent = nullptr);
    ~Frame();

protected:
    virtual void mouseMoveEvent(QMouseEvent *event);
    virtual void mousePressEvent(QMouseEvent *event);
    virtual void mouseReleaseEvent(QMouseEvent *event);

private:
    Ui::Frame *ui;
    QPoint z;

};

#endif // FRAME_H

 

源文件:

#include "frame.h"
#include "ui_frame.h"
#include <QMouseEvent>

Frame::Frame(QWidget *parent) :
    QFrame(parent),
    ui(new Ui::Frame)
{
    ui->setupUi(this);
    this->setWindowFlags(Qt::Window | Qt::FramelessWindowHint);
}

Frame::~Frame()
{
    delete ui;
}

void Frame::mouseMoveEvent(QMouseEvent *event)
{
    QWidget::mouseMoveEvent(event);

    QPoint y = event->globalPos(); // 鼠标相对于桌面左上角位置
    QPoint x = y - this->z;

    this->move(x);
}

void Frame::mousePressEvent(QMouseEvent *event)
{
    QWidget::mousePressEvent(event);

    QPoint x = this->geometry().topLeft(); // 窗口左上角相对于桌面左上角位置
    QPoint y = event->globalPos(); // 鼠标相对于桌面左上角位置
    this->z = y - x; // 这是个定值
}

void Frame::mouseReleaseEvent(QMouseEvent *event)
{
    QWidget::mouseReleaseEvent(event);

    this->z = QPoint();
}

 

ui文件:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Frame</class>
 <widget class="QFrame" name="Frame">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>400</width>
    <height>300</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Frame</string>
  </property>
  <property name="styleSheet">
   <string notr="true">background-color: rgb(0, 255, 255);</string>
  </property>
  <property name="frameShape">
   <enum>QFrame::StyledPanel</enum>
  </property>
  <property name="frameShadow">
   <enum>QFrame::Raised</enum>
  </property>
 </widget>
 <resources/>
 <connections/>
</ui>

调用方法:

void MainWindow::on_btnFrameless_clicked()
{
    Frame* frame = new Frame(this);
    frame->show();
}

 

标签:窗口,qt,拖动,Frame,QMouseEvent,event,ui,QPoint,void
From: https://www.cnblogs.com/warmlight/p/16954694.html

相关文章

  • js 双指放大、拖动图片
    $(function(){vareleImg=document.querySelector('#image');varstore={scale:1};//缩放处理eleImg.addEventListener('touchstar......
  • Qt音视频开发05-保存视频文件(yuv/h264/mp4)
    一、前言和音频存储类似,视频的存储也对应三种格式,视频最原始的数据是yuv(音频对应pcm),视频压缩后的数据是h264(音频对应aac),由于很多播放器或者早期的播放器不支持直接播放h26......
  • Qt(5.15) CMakeLists.txt简单介绍
    CMakeLists.txtcmake_minimum_required(VERSION3.5)指定cmake最低版本project(projectnameVERSION0.0.1LANGUAGESCXX)message("project_version:${CMAKE_PROJE......
  • WIN7 安装QT Creator
     1、到官网下载QT在线安装器,https://download.qt.io/official_releases/online_installers/2、注册或登陆之后,选择要安装的组件,Win7能选择的最新版本只能是5.15版本参......
  • MySQL窗口函数介绍详情
    一、窗口函数基本点(一)定义窗口的概念非常重要,它可以理解为记录集合,窗口函数也就是在满足某种条件的记录集合上执行的特殊函数。对于每条记录都要在此窗口内执行函数,窗口......
  • QT添加下拉框
    1.在ui界面上有一个名为comboBox_content的下拉框,向其添加四个下拉内容,QModbusDataUnit是QModbusTcpClient的成员//四种通信内容:线圈(Coil)、离散量输入(DiscreteInputs)、输入......
  • Qt+vs读取文件(文件对话框问题)
    QtCreator文件定位正确,VS2010+QT定位失败://选择数据库名称voiddbSettingDlg::on_selectBtn_clicked(){QStringdataBaseName=QFileDialog::getOpenFileName(thi......
  • 谈谈 Qt 程序安装包的大小,以及简要打包指南
    经常看到网上有些论调说Qt程序无比庞大,甚至拿.NET程序来比,说Qt程序打包以后跟.NET安装包差不多大。由此影响了很多人对Qt的选择。我觉得有必要对此做一些澄清—......
  • JFrame窗口
    Swing之JFrame窗体窗口第一步:获得一个容器:(Containercontainer=this.getContentPane()......
  • pyqt5--1、注册页面设计
    环境配置pipinstallpyqt5pipinstallpyqt5-tools(/官网)pyqt5-tools下载地址:Linksforpyqt5-tools(pypi.org)---pyqt-tools的安装包(.whl)下载网址镜像源:阿......