当前位置: 首页 > news >正文

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
http://www.lryc.cn/news/118592.html

相关文章:

  • .net core 配置swagger
  • leetcode707. 设计链表(单链表+虚拟头指针+双指针遍历)
  • 电脑麦克风没声音?
  • React Native元素旋转一定的角度
  • LeetCode 1749. 任意子数组和的绝对值的最大值
  • 初学HTML:在线简易画板设计。
  • IDEA项目实践——Spring框架简介,以及IOC注解
  • Scala(第一章Scala入门)
  • Linux tcpdump 命令详解
  • 试卷擦除答案的工具,几个步骤轻松搞定
  • vue3部署宝塔后请求接口404以及刷新页面404的问题解决方案
  • java.sql.Date java.util.Date
  • 斗象科技-2023攻防演练必修高危漏洞集合百度网盘下载(2版本)
  • 分布式数据库视角下的存储过程
  • 深度学习常用的激活函数
  • 深度学习之用PyTorch实现逻辑回归
  • 04-4_Qt 5.9 C++开发指南_时间日期与定时器
  • 7个顶级开源数据集来训练自然语言处理(NLP)和文本模型
  • 计算机网络 网络层 边界网关协议BGP
  • GitHub上受欢迎的Android UI Library
  • cpm log2((cpm/10) + 1) nmf 1e6 1e5
  • 竞赛项目 深度学习的视频多目标跟踪实现
  • 如何避免用waveformRecord复制数组
  • RocketMQ 延迟消息
  • Dex文件混淆(一):BlackObfuscator
  • Linux下编译arm 32 出错(/bin/bash: arm-none-linux-gnueabi-gcc: command not found )
  • 最近遇到的两个小问题总结:git问题和node问题
  • Java # Spring(1)
  • SCL更换阿里数据源
  • 【web逆向】全报文加密流量的去加密测试方案