qt自定义含有拖动功能的窗口在点击窗口的下拉列表时窗口移动

提要

自定义的弹出窗口,窗口可以实现按下鼠标拖动,鼠标释放停止拖动,窗口种含有子控件,下拉列表,在点击下拉列表时窗口移动。

解决方法

因为点击下拉列表的时候,触发了窗口的移动事件,所以添加下拉列表的事件过滤。
下面附上实现代码:

ui->comboBoxReso->installEventFilter(this);bool ResolutionDialog::eventFilter(QObject *obj, QEvent *event)
{if(obj == ui->comboBoxReso){if(event->type() == QEvent::MouseMove){return true;}}return QDialog::eventFilter(obj,event);
}

ui文件的结构如下:
在这里插入图片描述
在构造函数种安装控件的事件过滤器。然后重写过滤事件。
完整的代码如下:
resolutiondialog.h

#ifndef RESOLUTIONDIALOG_H
#define RESOLUTIONDIALOG_H#include <QDialog>
#include "datastruct.h"/***********类功能描述:分辨率设置对话框************/
namespace Ui {
class ResolutionDialog;
}class ResolutionDialog : public QDialog
{Q_OBJECTpublic:explicit ResolutionDialog(QWidget *parent = nullptr);~ResolutionDialog();//初始化void initResolutions();//初始化下拉列表的分辨率protected:bool eventFilter(QObject *obj, QEvent *event);//过滤事件,过滤掉下拉列表的点击事件void mousePressEvent(QMouseEvent *event);//鼠标点击void mouseMoveEvent(QMouseEvent *event);//鼠标移动事件void mouseReleaseEvent(QMouseEvent *event);//鼠标释放事件
signals:void sigEveryResolution(stuReso &stuResolution);//发送每块屏的屏幕分辨率
public slots:void onSetRowColSlot(int row,int col);//设置SpinBox的行列信息
private slots:void on_closeBtn_clicked();//关闭按钮void on_confirmBtn_clicked();//确定按钮void on_cancelBtn_clicked();//取消按钮private:Ui::ResolutionDialog *ui;QPoint              m_offPos;//鼠标点击点与窗口左上角之间的距离
};#endif // RESOLUTIONDIALOG_H

resolutiondialog.cpp

#include "resolutiondialog.h"
#include "ui_resolutiondialog.h"
#include <QStyledItemDelegate>ResolutionDialog::ResolutionDialog(QWidget *parent) :QDialog(parent),ui(new Ui::ResolutionDialog)
{ui->setupUi(this);initResolutions();QStyledItemDelegate *delegate = new QStyledItemDelegate();ui->comboBoxReso->setItemDelegate(delegate);ui->comboBoxReso->installEventFilter(this);setWindowFlag(Qt::FramelessWindowHint);setAttribute(Qt::WA_TranslucentBackground);
}ResolutionDialog::~ResolutionDialog()
{delete ui;
}void ResolutionDialog::initResolutions()
{QList<QString> strList;strList.append("3840x2160");strList.append("1920x1080");strList.append("1680x1050");strList.append("1600x900");strList.append("1440x900");strList.append("1366x768");strList.append("1280x1024");QStringList strResoList(strList);ui->comboBoxReso->addItems(strResoList);
}bool ResolutionDialog::eventFilter(QObject *obj, QEvent *event)
{if(obj == ui->comboBoxReso){if(event->type() == QEvent::MouseMove){return true;}}return QDialog::eventFilter(obj,event);
}void ResolutionDialog::mousePressEvent(QMouseEvent *event)
{if (event->button() == Qt::LeftButton) {QPoint startPos = event->globalPos();m_offPos = startPos - geometry().topLeft();}QDialog::mousePressEvent(event);
}void ResolutionDialog::mouseMoveEvent(QMouseEvent *event)
{if (event->buttons() == Qt::LeftButton) {QPoint endPos = event->globalPos();move(endPos - m_offPos);}QDialog::mouseMoveEvent(event);
}void ResolutionDialog::mouseReleaseEvent(QMouseEvent *event)
{QDialog::mouseReleaseEvent(event);
}void ResolutionDialog::onSetRowColSlot(int row, int col)
{ui->spinBoxRow->setRange(0,row-1);ui->spinBoxCol->setRange(0,col-1);
}void ResolutionDialog::on_closeBtn_clicked()
{close();
}void ResolutionDialog::on_confirmBtn_clicked()
{stuReso tempReso;tempReso.row = ui->spinBoxRow->value();tempReso.col = ui->spinBoxCol->value();QString strTemp = ui->comboBoxReso->currentText();QStringList strList = strTemp.split('x');QString strW = strList.first();QString strH = strList.last();tempReso.width = strW.toInt();tempReso.height = strH.toInt();emit  sigEveryResolution(tempReso);accept();
}void ResolutionDialog::on_cancelBtn_clicked()
{reject();
}

上面只将这个出现上述问题的类的代码附上。因为其中涉及到项目中的一些需求实现,读者可以选择性读取,理解我说明的问题解决思路便好,代码可以参考。由于涉及到qss文件设置样式,那部分没有贴出来,读者可以注释掉背景透明和无边框的设置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/524043.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字化转型2.0落地的正确姿势 | 人物志

戳蓝字“CSDN云计算”关注我们哦&#xff01;人物志&#xff1a;观云、盘点、对话英雄。以云计算风云人物为核心&#xff0c;聚焦个人成长、技术创新、产业发展&#xff0c;还原真实与鲜活&#xff01;如今&#xff0c;企业数字化转型已经进入2.0时代&#xff0c;数字化转型2.0…

新华三首发数字大脑计划;微软进军物联网领域?说好的三星折叠屏发布会,就这样不开了?Google 发布小型芯片 Jacquard...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 波音首席执行官“声明安全”…

OpenGL 图像白平衡色温

目录 一.OpenGL 图像白平衡色温 1.IOS Object-C 版本1.Windows OpenGL ES 版本2.Windows OpenGL 版本 二.OpenGL 图像白平衡色温 GLSL Shader三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenG…

Linux6、7 系列 安装、卸载mysql

Linux环境下载mysql&#xff1a; 点击链接&#xff1a; https://blog.csdn.net/weixin_40816738/article/details/90111456 一、安装环境依赖&#xff1a; yum install -y cmake make gcc gcc-c libaio ncurses ncurses-devel二、安装流程 1、软件解压2、添加系统mysql组和m…

Kafka精华问答 | Kafka的主要应用场景有哪些?​

Kafka是最初由Linkedin公司开发,具有高性能、持久化、多副本备份、横向扩展能力。今天&#xff0c;我们就看看看关于Kafka的精华问答吧。1&#xff1a;Q:什么是Kafka&#xff1f;A&#xff1a;Kafka是由Apache软件基金会开发的一个开源流处理平台&#xff0c;由Scala和Java编写…

强推!十大顶级大数据可视化工具 | 程序员硬核评测

戳蓝字“CSDN云计算”关注我们哦&#xff01;程序员硬核评测&#xff1a;客观、高效、不说软话。无论是技术质量、性能水平&#xff0c;还是工具筛选&#xff0c;一测便知&#xff01;编译作者&#xff1a;风车云马前言Salesforce公司的一项调查显示&#xff1a;53%的员工要经常…

代码版本管理 GitLab介绍

一、前言 GitLab是利用 Ruby on Rails 一个开源的版本管理系统&#xff0c;实现一个自托管的 Git 项目仓库&#xff0c;可通过 Web 界面进行访问公开的或者私人项目。 它拥有与 Github 类似的功能&#xff0c;能够浏览源代码&#xff0c;管理缺陷和注释。可以管理团队对仓库的…

国内首款全国产固态硬盘控制芯片发布

4月22日&#xff0c;国科微与龙芯中科战略合作签约暨国内首款全国产固态硬盘控制芯片发布仪式在北京人民大会堂举行。双方将建立长期稳定的业务合作伙伴关系&#xff0c;携手打造关键信息基础设施国产化生态。作为首个战略合作成果&#xff0c;国科微发布全新的GK2302系列芯片&…

使用gitlab初次上传代码

提要 项目开发中需要使用gitlab来管理代码&#xff0c;将自己开发的模块上传到gitlab,第一次使用这个代码管理仓库&#xff0c;记录一下。 方法 1.首先注册gitlab的账号。这个在百度上搜一下gitlab的官网&#xff0c;进去后首页就是注册及登陆页面&#xff0c;没有账号的先注…

云数据库精华问答 | 现有数据库优化到云环境有什么好处​?

云数据库可以实现按需付费、按需扩展、高可用性以及存储整合等优势。我们就看看看关于云数据库的精华问答吧。1&#xff1a;Q:什么是云数据库&#xff1f;A&#xff1a;云数据库是指被优化或部署到一个虚拟计算环境中的数据库&#xff0c;可以实现按需付费、按需扩展、高可用性…

上传更新的代码到gitlab

提要 项目开发中已经初次上传代码到gitlab上&#xff0c;那么后面在本地修改了代码之后怎么上传&#xff0c;本文作以说明。 方法 首先说明一点&#xff0c;若你本地代码要上传的代码在你之前创建的本地仓库之外&#xff0c;那么你需要将要上传的代码拷贝到本地仓库中&#…

华为2019年第一季度业绩曝光;联想and谷歌加入英特尔新晋云计划;即特斯拉起火,蔚来ES8也维修起了火...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 亚马逊仓库&#xff08;图片…

怎么从gitlab上下载别人的代码

提要 当需要从gitlab上下载别人的代码时&#xff0c;这里简述一下如何操作。 方法 按如下的步骤来实现&#xff1a; 1.在自己的电脑脑上新建一个空文件夹&#xff0c;文件夹的名称自己取。 2.在新建的文件夹上右键&#xff0c;选择git bash here菜单&#xff0c;弹出一个命令…

集群概述

一、什么是集群 1. 集群概念2.集群的特点3. 集群的两大能力4. 集群与分布式的区别 1. 集群概念 ①集群是一种计算机系统&#xff0c; 它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。②在某种意义上&#xff0c;他们可以被看作是一台计算机。集…

在这座智慧岛上 看华为的坚定与“野心”

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;在ICT这个江湖里,不乏拼搏向上的企业&#xff0c;但是耐得住性子、扛得住诱惑&#xf…

深入浅出Docker 镜像 | 技术头条

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;作为云计算的当红明星Docker 来势汹汹,它就像一场森林大火&#xff0c;烧到了我们中间…

一分钟弄懂什么是分布式和微服务

微服务是架构设计方式&#xff0c;分布式是系统部署方式&#xff0c;两者概念不同 一、微服务 1、简单来说微服务就是很小的服务&#xff0c;小到一个服务只对应一个单一的功能&#xff0c;只做一件事。 2、这个服务可以单独部署运行&#xff0c;服务之间可以通过RPC来相互交互…

Centos7 Docker镜像操作_入门试炼02

文章目录一、镜像操作常用命令二、镜像基础操作2.1. 删除所有镜像2.2. 列出镜像2.3. 搜索镜像2.4. 拉取镜像2.5. 查看所有镜像2.6. 镜像加速器2.7. 删除指定镜像2.8. 列出所有镜像ID2.9. 删除所有镜像一、镜像操作常用命令 说明命令列出docker下的所有镜像docker images列出所…

虚拟化精华问答 | 如何为虚拟机分配任务?

虚拟化&#xff0c;是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。今天就让我们来看看关于虚拟化的精华问答吧。1Q&#xff1a;在一台特定的服务器上&#xff0c;每一个虚拟机是否可以运行任何版本的Windows&#xff1f;A&#xff1a;服务器虚拟化对于你在每一个虚拟机…

Centos7 Docker容器操作_入门试炼03

文章目录一、容器常用命令二、查看容器2.1. 查看正在运行容器2.2. 查看所有的容器&#xff08;启动过的历史容器&#xff09;2.3. 查看最后一次运行的容器2.4. 查看停止的容器三、容器创建和运行3.1. 交互式容器和守护式容器的区别3.2. 目录映射3.3. 交互式容器(不建议使用)3.4…