2009-06-19 12 views
2

誰もがカスタムスタイルのカスタムウィジェットをQtで体験していますか? (私はQtの4.5を使用しています)Qtのカスタムウィジェットのカスタムスタイル

問題は次のようになります。

私は既存の描画プリミティブとサブコントロールに完全に基づいていないいくつかのカスタムコントロールを開発したいです。アプリケーション全体がスキン可能でなければならないので、私はスタイルシートにも可能なカスタムスタイルに依存したいと思っています。

私はこれらの新しいコントロールに設定する必要がどのような次のとおりです。

  • 追加メトリック
  • 追加のパレットエントリインターネットやドキュメントに掘り
  • 追加のスタイルオプション

、I QStyleのサブクラスから新しいスタイルクラスを派生させ、新しいパレットエントリを追加するためのポリッシュメソッドをオーバーライドする必要があることを発見しました。 drawControl(および他の描画方法)カスタムコントロールおよびカスタムパーツのロジックを描画します。

  1. は現在、すでにQtの中で実装され、さまざまなスタイルのためのさまざまなスタイルのクラスがあります。

    私は私を気に二つの問題があります。 (例えば、QMotifStyle,QWindowsStyle)、それぞれが異なる設定を有する。継承を通じて、これらのスタイルすべてに正しく統合するために、各スタイルのペイントと追加セットアップロジックを再実装する必要があります。別の選択肢がありますか?

  2. これらのカスタムスタイルでスタイルシートを使用する方法についてはまだ混乱しています。 Qtのドキュメントよりも多くの情報を見つけることができる場所を指し示すことはできますか? (Qtのサンプルはあまり役に立ちません)。

+1

JFYIは、QTではなくQTで書かれています。 –

答えて

2

それがカスタムクラスにないので、スタイルシートの問題は、解決されることはありません。

カスタムスタイルに追加された追加機能は、既存のクラスでは理解されず、注意が払われません。これは、C++は静的言語であり、ランタイムクラスをモンキーパッチする(クリーンかつ純粋な)方法がないためです。潜在的な解決策は、標準のQStyleサブクラスの特定のインスタンスをラップするプロキシスタイルを使用することです。あなたがそれをどの程度達成したいかによって、2つの記事、すなわちCross-platform code and stylesLook 'n' Feel Q & Aを参照することができます。

私があなたの場合は、QStyleのアプローチにはなりません。 Afterallでは、カスタムウィジェット(FooSomethingなど)を作成して、完全に異なるカスタムスタイル(FooStyleなど)を追加したり、QStyleを模倣する必要はありません。もちろん、同様の機能を複製する必要があります。スタイルシートをサポートする。

1
  1. 代替が正しい間隔を得るために正しい色とQStyleを取得するためにQPaletteを使用することができます。 Qtの4.5用

  2. QStyle's documentation

    警告: Qtのスタイルシートが現在 カスタムQStyleサブクラスのためにサポートされていません。 今後のリリースでこれを解決する予定です。

+0

まだ問題1は解決されていません。新しい部品、サブコントロール、カスタムコントロールのペイントロジックを追加したいと思います。スタイルサブクラスごとに追加しないことをお勧めします。 –

関連する問題