2013-06-27 25 views
5

Qtのスタイルシートのメソッドにはかなり新しく、QPushButtonのアイコンとテキストの間隔を調整しようとしています。 http://imageshack.us/scaled/thumb/593/4kem.png(stackoverflowのは、私はまだ写真を掲載させません)スタイルシートでQPushButtonのアイコン/テキストの間隔を変更するには?

QPushButton { 
    qproperty-icon: theme_url("/button_action/add"); 
    qproperty-iconSize: 14px; 
} 

私はこのスペースを調整するために使用できるパラメータがあります:

これは私が参照してるギャップがありますか?私は試しましたmarginpadding,spacing?おそらく、私がアイコンをつかむのに使うことができる別のセレクターがありますか?

+1

私はスタイルシートに役立つものは何も見たことがありません。ボタンのテキストに空白を使用することはできますか? ;) – ariwez

+1

システムにはたくさんのボタンがありますので、手動でそれらをすべて変更するのではなく、ワン・ストップの答えを得ることを望んでいました... – hannahd

+0

ギャップを考慮してアイコンを変更できますか?私が知る限り、そのようなスタイルシートのプロパティはありません。ボタンの上にテキストとアイコンを設定することはできませんが、代わりにボタンにレイアウトを設定し、2つのラベルを挿入してください。アイコンは1つ、テキストは – cppguy

答えて

0

実際にQPushButtonを使用すると運が悪いです。 qt documentation(私はあなたがqt5を使用していると仮定していますが、それは他のバージョンでも利用可能です)のスタイリングプッシュボタンの作業オプションの完全なリストを見つけることができます。

QPushButtonsをQToolButtonsと交換することは、ツールバーと互換性を持たせるための特別な機能を持っている点を除いて全く同じです。さらに、アイコン配置のオプションが増えています。しかし、as you can seeはQPushButtonsとまったく同じ方法でスタイルされているので、これはうまくいかないかもしれません。しかし、 "toolButtonStyle"パラメータを調べると、アイコンを動かすことができます。

次は、アートワークの変更になります。あなたが望むのはスペースが増えたら余分な空のピクセルをアートワークに追加するだけです。これは完璧主義者の心を傷つけますが効果的です。

次に、QPushButtonをサブクラス化し、自分で塗料をオーバーライドします。それはそれよりも難しいと思う。 Qtのサブクラス化はすでに習慣になっており、うまく機能します。サブクラス化については、がjiffie(4.8では同じですが、5とほぼ同じであるはずです)にあります。それは、ペイントイベントをオーバーライドすることさえカバーします。

希望しました。

0

Qt5.5以上(これは将来変わるかもしれませんが)複雑なペイントイベントをオーバーライドするだけでなく、私の意見では単なる単純なことではありませんが、それを動かす固有のQt方法はありませんアイコンをここやそこにいくつかのピクセル(小さな調整)。アイコンを削除してスタイルシートを使用して、リソースURLのアイコンにを設定すると、スタイルシートでbackground-positionプロパティを使用できますが、残念なことにピクセル調整ではなくcenterleftなどの単語しか受け付けません。

この問題を解決した方法は次のとおりです。私はPNGのアイコン自体の周りに4ピクセルのマージンが必要な、私が必要とするよりもやや大きめの透明なPNGを作成しました。その後、アイコンをキャンバス内に移動してプロジェクトリソースファイルにリロードした後、QPushButtonのアイコンプロパティを使用してアイコンプロパティを再度マップしていました。私は今、左にテキストが並んでいるアイコンを正しく並べています。私はアイコンとテキストの間のギャップを広げることさえできます。

0

最も簡単な方法は、QPushButtonから継承した独自のクラスを作成し、PaintEventをオーバーライドし、必要に応じて手動でアイコンのピクスマップを配置することです。

0

Qt5.7以降、アイコン/テキスト間隔の組み込み機能についてはわかりません。 私が通常やっていることは、画像をさらにいくつかのスペースに置き、それに応じてボタンのアイコンサイズを設定することです。

ソリューション

  1. 32 * 16ピクセルにあなたのアイコンファイルのサイズを変更したがあるとして、その内容を残します。
  2. ボタンのsetIconSize(QSize(32,16))を呼び出します。

結果:アイコンとテキストの間に16ピクセルの空白があります。 32ピクセルは私の例ですが、あなたのスタイルに合ったものに追加のサイズを設定することはもちろん可能です。

すべてのボタン要素に適用する場合は、コンストラクタで自動的に行う小さなサブクラスを作成するだけです。実際にはpaintEventメソッドをオーバーライドする必要はありません。

関連する問題