Qt 文件对话框使用 Deepin风格

当你在Deepin或UOS 上开发 Qt 程序时,如果涉及到文件对话框功能,那么就会遇到调用原生窗口的问题。

如果你使用的是官方的Qt版本,那么在Deepin或者UOS系统上,弹出的文件对话框会是如下这样:

而Deepin或UOS系统提供的默认对话框:

在这里插入图片描述

可以看到,Qt自身提供的对话框太丑,与系统的UI风格不搭,不协调。所以有没有什么办法能够使得Qt弹出的文件对话框是Deepin 或 UOS风格呢

为了能实现Deepin 或 UOS系统风格的文件对话框,有以下方案:

  1. 使用DTK开发

    DTK(Development ToolKit)是UOS基于 Qt 开发的一整套简单且实用的通用开发框架,不过使用DTK将不能跨平台,同时依赖很多。

  2. 使用qt5integration库

    qt5integration 用于Deepin桌面环境的Qt平台主题集成插件。它包含多个QT5插件,以使DDE更加QT5应用程序友好。但是,qt5integration依赖很多,依赖于DTK(编译DTK是一件很痛苦的事情),无法作为独立的库使用。

  3. Deepin/UOS 自带的Qt

    UOS自身维护了Qt 5.13的版本,并做了UOS风格化处理及相关优化。但由于UOS系统自带的Qt版本太低,与Qt 5.15.2 以上版本兼容性很差,且失去了跨平台能力,所以不考虑使用UOS维护的Qt版本。Deepin的Qt版本为5.15,版本较新,但同样不能跨平台,所以也不考虑。

综上,以上方案都不是最佳选择。

最佳解决方案

Deepin-QFileDialog 项目基于qt5integration进行的魔改,去掉了DTK等依赖,能够直接编译使用,完全独立的库,开箱即用,并且不需要更改任何代码。

通过Qt插件机制实现用于 Qt 弹出 Deepin 或 UOS 风格的文件对话框的功能。

https://github.com/L-Super/Deepin-QFileDialog

下载代码

git clone https://github.com/L-Super/Deepin-QFileDialog.git

编译

mkdir build && cd build
cmake ..
make -j8

生成libqdeepin.so动态库路径

build/plugins/platformthemes/libqdeepin.so

使用

将生成的 libqdeepin.so 动态库拷贝到 Qt platformthemes 目录下,这样在 Qt Creator运行程序时,弹出的文件对话框就是Deepin/UOS风格的对话框。

/home/Leou/Qt/5.15.2/gcc_64/plugins/platformthemes/

示例代码:

#include <QApplication>
#include <QFileDialog>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QFileDialog dialog;
    dialog.exec();

    return a.exec();
}

效果:

在这里插入图片描述

打包发布程序时,将libqdeepin.so放入安装包结构目录 plugins/platformthemes下即可

├── lib
├── plugins
│   ├── bearer
│   ├── iconengines
│   ├── imageformats
│   ├── platforminputcontexts
│   ├── platforms
│   ├── platformthemes
│   └── xcbglintegrations
└── translations

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

考研数据结构:第七章 查找

文章目录 一、查找的基本概念二、顺序查找和折半查找2.1顺序查找2.3折半查找2.3.1算法思想2.3.2代码实现2.3.3查找效率分析2.3.4折半查找判定树的构造2.3.5折半查找效率2.3.6小结 2.4分块查找 三、树形查找3.1二叉排序树3.1.1二叉排序树定义3.1.2查找操作3.1.3插入操作3.1.4二叉…

DVI端口静电防护,如何设计保护电路图?

Digital Visual Interface&#xff0c;简称DVI&#xff0c;中文名&#xff1a;数字视频接口&#xff0c;是一种视频接口标准&#xff0c;用来传输未经压缩的数字化视频&#xff0c;广泛应用于LCD、数字投影机等显示设备上。DVI端口的种类非常多&#xff0c;有DVI-A、DVI-D、DVI…

Rx.NET in Action 第二章学习笔记

2 Hello, Rx 本章节涵盖的内容: 不使用Rx的工作方式向项目中添加Rx创建你的第一个Rx应用程序 Rx 的目标是协调和统筹来自社交网络、传感器、用户界面事件等不同来源的基于事件的异步计算。例如&#xff0c;建筑物周围的监控摄像头和移动传感器会在有人靠近建筑物时触发&#xf…

threejs中gltf模型出现的问题(黑色,颜色不协调,太小)和解决方案

模型一片漆黑 如下图 可能原因&#xff0c;没有灯光&#xff0c;加下以下代码&#xff1a; // 4、加入灯光 const lightness new THREE.HemisphereLight(0xffffff, 0x444444); lightness.position.set(0, 20, 0); scene.add(lightness); const shadowLight new THREE.Direct…

文献综述|NLP领域后门攻击、检测与防御

前言&#xff1a;在信息安全中后门攻击&#xff08;Backdoor Attack&#xff09;是指绕过安全控制而获取对程序或系统访问权的方法。而随着深度学习以及各种神经网络模型的广泛应用&#xff0c;神经网络中存在的后门问题也引起了研究人员的广泛关注。神经网络后门攻击就是使网络…

robotframework+selenium 进行webui页面自动化测试

robotframework其实就是一个自动化的框架&#xff0c;想要进行什么样的自动化测试&#xff0c;就需要在这框架上添加相应的库文件&#xff0c;而用于webui页面自动化测试的就是selenium库. 关于robotframework框架的搭建我这里就不说了&#xff0c;今天就给大家根据一个登录的实…

淘宝API接口的实时数据和缓存数据区别

电商API接口实时数据是指通过API接口获取到的与电商相关的实时数据。这些数据可以包括商品库存、订单状态、销售额、用户活跃度等信息。 通过电商API接口&#xff0c;可以实时获取到电商平台上的各种数据&#xff0c;这些数据可以帮助企业或开发者做出及时的决策和分析。例如&…

web会话跟踪以及JWT响应拦截机制

目录 JWT 会话跟踪 token 响应拦截器 http是无状态的&#xff0c;登录成功后&#xff0c;客户端就与服务器断开连接&#xff0c;之后再向后端发送请求时&#xff0c;后端需要知道前端是哪个用户在进行操作。 JWT Json web token (JWT), 是为了在网络应用环境间传递声明而…

Vue3 大屏数字滚动效果

父组件&#xff1a; <template> <div class"homePage"> <NumRoll v-for"(v, i) in numberList" :key"i" :number"v"></NumRoll> </div> </template> <script setup> import { onMounted, r…

安装elasticsearch

一、docker安装elasticsearch 1、下载镜像 docker pull elasticsearch:6.5.4 2、启动容器 docker run -p 9200:9200 -p 9300:9300 --name elasticsearch \ -e "discovery.typesingle-node" \ -e "cluster.nameelasticsearch" \ -e "ES_JAVA_OPTS-Xm…

答疑:Arduino IDE配置其他开发板下载速度慢

基于案例&#xff1a;Linux环境Arduino IDE中配置ATOM S3 通常&#xff0c;网络问题较多&#xff0c;可以使用一些技巧。 https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/arduino/package_m5stack_index.json 没有配置&#xff0c;不支持M5Stack&#xff08;ESP32&…

【设计模式】前端控制器模式

前端控制器模式&#xff08;Front Controller Pattern&#xff09;是用来提供一个集中的请求处理机制&#xff0c;所有的请求都将由一个单一的处理程序处理。该处理程序可以做认证/授权/记录日志&#xff0c;或者跟踪请求&#xff0c;然后把请求传给相应的处理程序。以下是这种…

机器学习笔记之优化算法(十二)梯度下降法:凸函数VS强凸函数

机器学习笔记之优化算法——梯度下降法&#xff1a;凸函数VS强凸函数 引言凸函数&#xff1a;凸函数的定义与判定条件凸函数的一阶条件凸函数的梯度单调性凸函数的二阶条件 强凸函数强凸函数的定义强凸函数的判定条件强凸函数的一阶条件强凸函数的梯度单调性强突函数的二阶条件…

小白带你学习linux的MongoDB(三十四)

目录 一、概述 1、相关概念 2、特性 二、应用场景 三、安装 四、目录结构 五、默认数据库 1、admin&#xff1a; 2、local: 3、config: 六、数据库操作 1、库操作 2、文档操作 七、MongoDB数据库备份 1、备份命令 2、回数据库删除…

Android侧滑栏(一)可缩放可一起移动的侧滑栏

在实际的各类App开发中&#xff0c;经常会需要做一个左侧的侧滑栏&#xff0c;类似于QQ这种。 今天这篇文章总结下自己在开发中遇到的这类可以跟随移动且可以缩放的侧滑栏。 一、实现原理 使用 HorizontalScrollView 实现一个水平方向的可滑动的View&#xff0c;左布局为侧滑…

纷享销客稳居2022 H2 SFA SaaS 本土CRM厂商市场份额 TOP 1

近期&#xff0c;国际知名研究机构IDC公布了2022年下半年《中国客户关系管理(CRM)SaaS市场跟踪研究报告》&#xff0c;报告全面解析了中国CRM SaaS以及细分市场SFA SaaS的市场现状&#xff0c;并对全球各大厂商在中国SFA市场的份额占比进行了排名。连接型CRM开创者纷享销客在SF…

MyBatis-Plugin源码全面分析

三、MyBatis-Plugin 1. 基本开发方式 需求&#xff1a;在MyBatis执行之前打印一行醒目的日志&#xff0c;携带参数 实现Interceptor接口&#xff1a; Intercepts(Signature(type Executor.class,method "query",args {MappedStatement.class,Object.class, RowB…

600 V单管IGBT,可在电源应用中实现出色效率

基础半导体器件领域的高产能生产专家Nexperia (安世半导体)今日宣布&#xff0c;将凭借600 V器件系列进军绝缘栅双极晶体管(IGBT)市场&#xff0c;而30A NGW30T60M3DF将打响进军市场的第一炮。Nexperia在其庞大的产品组合中增加了IGBT&#xff0c;满足了市场对于高效高压开关器…

多个项目使用的node版本不一致?vscode dev container + docker 真香

一、接手的项目多了&#xff0c;什么node版本都有~ 遇到这种情况&#xff0c;多数情况会使用 nvm 进行 node 版本管理&#xff0c;具体使用方法可戳nvm的安装与使用。但若要并行开发两个不同环境下的项目&#xff0c;不停切换node版本&#xff0c;也难免有些繁琐。此时&#xf…

HCIP学习--BGP3

目录 前置内容 BGP下一跳的修改问题 BGP的属性 配置 PrefVal权重属性 负载分担 LocPrf 负载分担 NextHop AS-PATH Ogn 配置 MED 配置 BGP选路规则 BGP的社团属性 配置及解释 前置内容 HCIP学习--BGP1_板栗妖怪的博客-CSDN博客 HCIP学习--BGP2_板栗妖怪的博客…