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
相关推荐
用户805533698035 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
xcyxiner5 天前
DicomViewer (vcpkg Windows和ubuntu编译)7
qt
Quz10 天前
QML Hello World 入门示例
qt
xcyxiner13 天前
DicomViewer (dcmtk读取dcm文件)5
qt
xcyxiner14 天前
DicomViewer (后台线程处理文件)4
qt
xcyxiner14 天前
DicomViewer (添加模型类)3
qt
xcyxiner15 天前
DicomViewer (目录调整) 2
qt
xcyxiner15 天前
dcmtk vtk vtk-dicom(gdcm) 编译(debug) v2
qt
桥田智能17 天前
桥田智能 QT-650S:面向白车身焊装的 800kg 重载快换解决方案
开发语言·qt·系统架构
森G17 天前
75、服务器源码解析---------云视频服务项目
linux·服务器·网络·c++·qt