Qt ファイル ダイアログは Deepin スタイルを使用します

Deepin や UOS 上で Qt プログラムを開発する場合、ファイルダイアログ機能が関係する場合、ネイティブウィンドウを呼び出すという問題が発生します。

公式 Qt バージョンを使用している場合、Deepin または UOS システムでは、ポップアップ ファイル ダイアログ ボックスは次のようになります。

Deepin または UOS システムによって提供されるデフォルトのダイアログ ボックス:

ここに画像の説明を挿入

Qt 自体が提供するダイアログ ボックスはあまりにも醜く、システムの UI スタイルと一致せず、調整されていないことがわかります。それでは、QtによってポップアップされるファイルダイアログをDeepinまたはUOSスタイルにする方法はありますか?

Deepin または UOS システム スタイルのファイル ダイアログ ボックスを実現するには、次の解決策があります。

  1. DTKを使用して開発

    DTK (Development ToolKit) は、Qt をベースに UOS が開発したシンプルで実用的な汎用開発フレームワークのセットです。ただし、DTK を使用すると、クロスプラットフォームで同時に多くの依存を行うことができません。

  2. qt5integration ライブラリの使用

    qt5integration は、Deepin デスクトップ環境用の Qt プラットフォーム テーマ統合プラグインです。これには、DDE を QT5 アプリケーションにさらに適したものにするためのいくつかの 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-QFileDialogqt5integrationプロジェクトは、DTK やその他の依存関係を削除する魔法の変更に基づいており、コンパイルして直接使用できます。完全に独立したライブラリであり、すぐに使用でき、コードを変更する必要はありませ

Qt が Deepin または UOS スタイルのファイル ダイアログ ボックスをポップアップ表示する機能は、Qt プラグインのメカニズムを通じて実現されます。

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 プラットフォームテーマ ディレクトリにコピーします。これにより、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

おすすめ

転載: blog.csdn.net/no_say_you_know/article/details/132220334