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/

示例代码:

cpp 复制代码
#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
相关推荐
四维碎片2 小时前
【Qt】线程池与全局信号实现异步协作
开发语言·qt·ui·visual studio
feiyangqingyun7 小时前
纯Qt结合ffmpeg实现本地摄像头采集/桌面采集/应用程序窗口采集/指定采集帧率和分辨率等
qt·ffmpeg·qt桌面采集·qt摄像头采集·qt程序窗口采集
王廷胡_白嫖帝12 小时前
Qt个人通讯录项目开发教程 - 从零开始构建联系人管理系统
开发语言·qt
戏言zare12 小时前
Qt设置软件使用期限【新版防修改系统时间】
qt
大橘14 小时前
【qml-5】qml与c++交互(类型单例)
qt·qml
lxmyzzs1 天前
pyqt5无法显示opencv绘制文本和掩码信息
python·qt·opencv
大橘1 天前
【qml-4】qml与c++交互(类型多例)
qt·qml
Forward♞1 天前
Qt——文件操作
开发语言·c++·qt
王廷胡_白嫖帝1 天前
Qt猜数字游戏项目开发教程 - 从零开始构建趣味小游戏
开发语言·qt·游戏
王廷胡_白嫖帝2 天前
Qt密码生成器项目开发教程 - 安全可靠的随机密码生成工具
开发语言·qt