4

次の状態に対応する 3 つの異なる背景画像を持つカスタム プッシュ ボタンを作成する必要があります。

  • 正常
  • マウスオーバー
  • マウスダウン

QHBoxLayoutボタンは左サイド、右サイド、中サイド(伸ばし側)の3パーツでお願いします。

中サイズの中に、テキストを表示するラベルが欲しいです。

このボタンにも「クリック」イベントが必要です。

これを達成するために多くの検索を行ってきましたが、本当に迷っています。QWidgetカスタム ウィジェットやスタイルシートを使用したスタイリングなど、多くのことを試しましQPushButtonたが、3 つのマウス状態とクリックされたイベントに対して 3 つの画像を持つことができませんでした。

助けを求めています。

4

2 に答える 2

2

このプロパティを使用するには、border-image次のように状態ごとに 1 つの画像を構成します。

           | | | |
左の画像 | 中間画像 | 右画像
           | | | |

次に、左右の画像サイズをボーダー スライス サイズとして指定し、スタイルシートのボーダー幅で指定します。たとえば、右の画像の幅が 25 ピクセルで、左の画像の幅が 20 の場合、次のようになります。

QPushButton {
    border-image: url(:/normal.png) 0 25 0 20 stretch stretch; 
    border-width:0 25 0 20; /* without it, only the middle images would show */
}
QPushButton:hover { 
    border-image: url(:/hover.png) 0 25 0 20 stretch stretch;
}
QPushButton:pressed { 
    border-image: url(:/pressed.png) 0 25 0 20 stretch stretch;
}

値は、画像の上、右、下、左の間の距離を表します。

于 2012-12-29T20:03:49.640 に答える
1

まず、3 つの状態に対して 3 つの画像が必要です。その後、関数setStyleSheetを使用できます。

QPushButton *btn = new QPushButton;
btn->setStyleSheet("QPushButton{background:url(:/Resources/pause_nor.png);border:0px;}"
        "QPushButton:hover{background:url(:/Resources/pause_over.png);border:0px}"
        "QPushButton:pressed{background:url(:/Resources/pause_over.png); position: relative;top: 1px; left: 1px;}");
于 2012-12-29T07:30:19.140 に答える