web-dev-qa-db-ja.com

QtCreator内からのQt標準アイコンの使用

Qt Standardアイコンを使用したい( ここにあるように )。 プログラムでアイコンを設定する (コードでランタイム)する方法の例をたくさん見つけました。

ただし、「標準のアイコン名」を設定するにはどうすればよいですか(例:application-exit)Qt Creatorで?これ ブログはこちら は、テーマをそれぞれの名前に設定するだけです。しかし、私はそのようなテーマプロパティを持っていません。リソースを含むポップアップが表示されます(下のスクリーンショット)。

「標準名」を適用する適切な場所(例:application-exit)?

2.4.xからQtCreator 2.5.2にアップデートすると、上記のブログの「テーマ」プロパティが表示されますが、まだ表示されるアイコンはありません。 アイコンを表示するには他に何が必要ですか?

Theme now available with Creator 2.5.2

備考Qt4.8.1、2.5.2、Windows7に更新されました

20
Horst Walter

テーマアイコンはLinux/X11でのみサポートされています。 WindowsおよびOSXでは、独自のアイコンを提供する必要があります。

この問題の解決策は、QtCreatorでテーマ名を設定することです(例のように)。次に、リソースのプレフィックス「:/ icons」の下に同じエイリアスのアイコンを指定する必要があります。パブリックドメインで利用可能なセットのアイコンを活用できます。人気のタンゴアイコンセット。

Windowsプラットフォームのみを対象としている場合、テーマ設定は役に立ちません。 Linux/X11と他のプラットフォームの両方をターゲットにしている場合、このソリューションを使用すると、1つのシステムでネイティブアイコンを取得し、他のシステムで自分で提供するアイコンを取得できます。

ここでそれを行う方法についての非常に良い説明を見つけることができます:http://mithatkonar.com/wiki/doku.php/ qt/icons

12
ypnos

@ypnosは、問題を解決するための複数のアプローチとの優れたリンクを提案しました。私は最後のものが好きです- カスタムアイコンテーマの作成 。著者は3つの長所を述べています(すべてのプラットフォームで利用可能優れたサイズ変更必要なすべてのアイコンをカバーしています)、および2つの短所(システムアイコンのテーマと一致しません実装するお尻の痛み)。 ここでは、短所を取り除くための改善を提案します。

GithubからTangoアイコンセットのクローンを作成しました。リポジトリ https://github.com/ppinard/qtango はすでにindex.themeファイルを備えています。しかし、主に、それはPythonスクリプト_generate_rcc.py_をもたらします。これは_*.qrc_ファイルを自動的に生成できます。subprocess.check_call()の引数を変更する必要がありました。 _'--binary'_および_'--compress'_から_'-binary'_および_'-compress'_へ。生成されたファイルには絶対パスが含まれていましたが、検索と置換は簡単です。このスクリプトを任意のアイコンセットに使用できます。最初の面倒な手順です。解決されます。

これで、「Theme」プロパティを使用して、質問ですでに示したように、QtDesignerでアイコンを定義できます。 Linuxで開発している場合、systemアイコンがDesignerに表示されます(アイコンセットが標準のアイコン名を使用していると仮定します)。これがネイティブの外観です(アイコンはシステム設定で構成できます)。これにより、ui->action_Open->setIcon(...)コーディングから解放されます。

そして最後の微調整は、テーマbeforeuisetupを設定することです。

_MainWindow::MainWindow(QWidget *parent) :
  QMainWindow(parent)
{
#ifdef _WIN32
  QIcon::setThemeName("tango");
#endif

  ui = new Ui::MainWindow;
  ui->setupUi(this);

  ...
  // NO NEED FOR ui->action_Open->setIcon(...)
}
_

もちろん、_#ifdef_は、必要なすべてのプラットフォームをターゲットにするように調整することも、Linuxを含むすべてのプラットフォームで同じアイコンを強制するように省略することもできます。

結果として、このアプローチはすべての面倒なコーディングを回避し、結果は少なくともLinuxではシステムアイコンと一致します。

4
yman