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…

linux上怎么解压zip文件和tar.gz文件

解压zip文件的方法 使用命令&#xff1a; unzip xxx.zip解压tar.gz文件的方法 使用命令&#xff1a; tar -zxvf xxx.tar.gz

新华三首发数字大脑计划;微软进军物联网领域?说好的三星折叠屏发布会,就这样不开了?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…

linux下查看cmake的版本

方法 在命令行输入指令&#xff1a; cmake --version

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

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

修改Maven本地仓库的位置 方法

一、关于Maven的配置: 用过Maven的开发人员应该知道Maven可以通过配置 conf文件夹下面的settings.xml文件来修改maven下载的包&#xff0c;默认是下在c盘的用户文件夹下的.m2中&#xff0c;日积月累.m2会越来越庞大&#xff0c;自然会影响windows的响应&#xff0c;所以一般我们…

linux下文件颜色说明

文件颜色说明 红色——压缩文件 绿色——可执行文件 蓝色——文件夹 白色——普通文件&#xff0c;像文本文件 黄色——设备文件 浅蓝色——链接文件

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

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

代码版本管理 GitLab介绍

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

linux下查找是否安装了fcitx插件

方法 在命令行输入指令&#xff1a; dpkg -L fcitx-frontend-qt5 也可以查找是否有libfcitxplatforminputcontextplugin.so这个库文件&#xff0c;在命令行输入&#xff1a; dpkg -L fcix-frontend-qt5 | grep .so

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

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

gitlab访问错误Whoops, GitLab is taking too much time to respond

一、异常现象&#xff1a; gitlab访问错误Whoops, GitLab is taking too much time to respond 二、问题定位 问题定位8080端口被占用&#xff1a; 三、解决方案 解决方案01&#xff1a; 将占用的8080端口的进程杀死或者卸载占用8080端口的软件修改正在占用8080端口程序的…

使用gitlab初次上传代码

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

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

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

上传更新的代码到gitlab

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

Python基础教程学习目录 - Python入门教程

Python 基础入门 2021 年 1 月 23 日 下午 12:48 目录 一.Python 基础篇二.Python 线程/进程篇 一.Python 基础篇 Python 简介Python Pycharm Anacanda 区别Python2.x 和 Python3.x&#xff0c;如何选择&#xff1f;Python 配置环境Python Hello World 入门Python 代码注释…

linux tail命令_操作手册

tail :输出文件的最后几行。 用于linux查看日志的时候很方便&#xff0c;假如日志文件为&#xff1a;Console.log 用法&#xff1a; 1、输出文件最后10行的内容 tail Console.log2、-n为最后n行&#xff0c;输出文件最后n行的内容&#xff0c;同时监视文件的改变&#xff0c;…

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

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