7

Qt UI の開発中に、既存の UI の上に通知やその他の表示ツールを表示したいことがよくあります。

ただし、これを行う方法は 2 つしか発見できませんでしたが、どちらも問題を完全に解決していません。

オプション1

通知ウィジェットを表示されたウィジェットの兄弟にしますが、レイアウトに追加したり、他のウィジェットの上に上げたりしないでください。

問題:ウィジェットをレイアウトに配置できないため、コンテンツに合わせて手動でサイズを変更する必要があり、親ウィンドウのサイズが変更されるたびに正しい位置に移動する必要があります。

オプション 2

表示されたウィジェットのすぐ横にウィジェットをレイアウトに追加します。

問題:ウィジェットはレイアウトの一部であるため、表示されている他のウィジェットの上に移動するのではなく、他のウィジェットを移動します。

例 - ここでは、通知によって「v0.3b」ラベルが上に表示されるのではなく、上に押し上げられます。反対に、左側にスペーサーがあるレイアウトの一部であるため、その内容に合わせて適切なサイズになっています。 ここに画像の説明を入力

解決

QStackedWidget一度に複数のページを表示し、空の領域にウィジェットを表示するようなものはありますか? この種の UI 機能の別のオプションはありますか?

4

3 に答える 3

1

そうです、QStackedWidget/QStackedLayout はあなたの友達です。スタック レイアウトのカスタム ウィジェットを作成し、メッセージが着信すると、アクティブなウィジェットを警告メッセージのあるウィジェットに設定し、タイマーを使用して、通常のウィジェットに戻します。このカスタム ウィジェットは、メイン ウィンドウの右下隅に配置できます。スペーサーを使えば、かなり簡単にできますよね?

于 2014-01-15T06:09:30.153 に答える
0

私が行う 1 つの方法は、通知ウィジェットを独自のカスタム ウィジェットとして作成し、それが配置されるウィジェットのサイズと一致するようにすることです。カスタム ウィジェットの背景を透明にします。

NotificationWidget::paintEvent(QPaintEvent* event) {
  QPainter painter(this);
  QColor bg;
  bg.setAlpha(0);

  painter.fillRect(rect(), QBrush(bg));
  QWidget::paintEvent(event);
}

そのウィジェットの通知部分のみが描画されます。通常どおりレイアウトに配置できます。これで、親のサイズを変更するたびに、カスタム通知ウィジェットもサイズ変更され、このウィジェットの表示部分が正しい場所に配置されます。コンストラクターでも次のことを行う必要があります。

NotificationWidget::NotificationWidget(QWidget* parent = 0) : QWidget(parent) {
  setWindowFlags(Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint);
  setAutoFillBackground(false);

  // add whatever widgets/layouts you want
}
于 2013-07-19T22:31:08.403 に答える