2

Dropboxにあるものと同様のコンテキストメニューをコーディングしようとしています:

ここに画像の説明を入力

これを行う最善の方法は、QSystemTrayIcon にアタッチされた QMenu のスタイルを設定することだと思いました。

class canvas : public QMenu
{
    Q_OBJECT
public:
    canvas(QObject* parent = 0);
};

canvas::canvas(QObject* parent) : QMenu()
{
    setStyleSheet("QMenu{background-color:#00ff00;}");
}

class tray_icon : public QSystemTrayIcon
{
    Q_OBJECT
public:
    tray_icon(canvas* a_canvas, QObject* parent = 0);
};

tray_icon::tray_icon(canvas* a_canvas, QObject* parent) : QSystemTrayIcon(parent)
{
    setContextMenu(a_canvas);
}

しかし、何らかの理由で QMenu は setStyleSheet 呼び出しに反応せず、同じままです。

いくつか質問があります:

  1. この状況で私が間違っていること (背景色が緑に設定されていない理由)。
  2. QMenu は、そのようなドロップダウンを作成するための適切なツールですか (おそらく、他のウィジェットを使用する必要があります)。Dropbox はどのようにしてこのようなメニューを作成したのですか?

ありがとうございました!

4

1 に答える 1

1

スタイル シートについては、QT でカスタマイズされていないトレイ メニューしか作成していないため、この例の何が問題なのかはわかりません。メニュー バーの項目もオーバーライドする必要があると思います。メニューの背景のみを設定します。アイテムは幅全体を占めるため、背景が表示されないだけだと思います。QMenu::itemとのスタイルを設定してみてQMenu::item:selected、それが役立つかどうかを確認してください。

QMenuアプローチについては - 繰り返しますが、正確なことはしていませんが、ボタンのレイアウト方法をあまり制御できず、方法がわからないため、ジェネリックがこれに適合するとは思いませんDropbox の例のように空白を取得するには、独自のウィジェットの実装が必要で、他のウィジェットを追加したり、レイアウトしたりする必要があると思います。サブクラス化QMenuして、ボタンなどのカスタム ウィジェットを追加してみて、変更を加えるのに役立つかどうかを確認できます。あなたが必要です。

于 2013-09-10T13:27:28.467 に答える