1

私はQtフレームワークに少し慣れていないので、要件の1つで少し苦労しています。

ボタンをクリックするとメインウィンドウがフェードし、確認メッセージがポップアップ表示されます。これにより、ポップアップメッセージのみが表示され、背景が不透明になります。

現在、ボタンをクリックするとメッセージが表示され、背景が不透明になります。しかし、ウィンドウ内の他のウィジェットは依然として目立ちます。

以下は、[OK]ボタンのクリックイベントのコードスニペットです。

void MainWindow::OkClicked()
{
  QGraphicsOpacityEffect*   effect01  = new QGraphicsOpacityEffect();
  effect01->setOpacity(0.2);
  this->setGraphicsEffect(effect01);
  MessageDialog->updateStyles(); //Pop-up message Box
  MessageDialog->show();
}

すべてのウィジェットの不透明度を個別に設定する場合、1つのアプローチが可能です。しかし、それは良いデザインにはなりません。どんなガイダンスも高く評価されます。

4

1 に答える 1

3

包含ウィジェットを作成し、alphaプロパティを持つbackground-colorプロパティを使用してQSSスタイリングを追加することができます。次に、ネストされたウィジェットのレイアウトを整理するために、含まれているウィジェットにレイアウトを追加します。この手法を使用して、ネストされたコントロールの不透明度を維持しながら透明効果を実現します。次にいくつかのサンプルコードを示します。

setAttribute(Qt::WA_NoSystemBackground, true);
// set the parent widget's background to translucent
setAttribute(Qt::WA_TranslucentBackground, true);

setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
// create a display widget for displaying child widgets
QWidget* displayWidget = new QWidget;
displayWidget->setGeometry(0, 0, this->width(), this->height());
displayWidget->setStyleSheet(".QWidget { background-color: rgba(0, 0, 0, 75%); border-width: 1px; border-style: solid; border-radius: 5px; border-color: #555555; } .QWidget:hover { background-color: rgba(68, 68, 68, 75%); border-width: 2px; border-style: solid; border-radius: 10px; border-color: #ffffff; }");

QLabel* icon = new QLabel;
icon->setPixmap(pixmapIcon);
icon->setMaximumSize(32, 32);
QLabel* header = new QLabel;
header->setMaximumSize(225, 50);
header->setWordWrap(true);
header->setText(headerText);
header->setStyleSheet("QLabel { color: #ffffff; font-weight: bold; font-size: 12px; }");
QLabel* message = new QLabel;
message->setMaximumSize(225, 100);
message->setWordWrap(true);
message->setText(messageText);
message->setStyleSheet("QLabel { color: #ffffff; font-size: 10px; }");
QHBoxLayout* displayMainLayout = new QHBoxLayout;
displayMainLayout->addWidget(icon);
QVBoxLayout* vl = new QVBoxLayout;
vl->addWidget(header);
vl->addWidget(message);
displayMainLayout->addLayout(vl);
displayWidget->setLayout(displayMainLayout);

QHBoxLayout* containerLayout = new QHBoxLayout;
containerLayout->addWidget(displayWidget);
setLayout(containerLayout);

show();

このコードは、Qt TrayNotificationManagerプロジェクトから直接取得したものです。ここで完全なコードを表示して、コンテキストを取得できます:https ://github.com/pcmantinker/Tray-Notification-System

CSSに精通している場合、QSSは非常に似ていることに注意してください。すべてのQWidgetを特定の方法でスタイル設定する場合は、QWidgetセレクターを使用します。ただし、特定のQWidgetのスタイルを設定するだけの場合は、.QWidgetセレクターを使用してください。すべてのQWidgetsをスタイリングすると、表示されているすべてのQWidgetsが、各UI要素がQWidgetから派生したものと同じプロパティを継承するようになります。スタイルを作成するときは、このことを念頭に置いてください。QSSへの参照は次のとおりです:http://qt-project.org/doc/qt-4.8/stylesheet.html

外観のサンプル画像を次に示します 。Windows7MacOS
XLionUbuntu
Windows 7
これがお 役に立てば幸いです。ご不明な点がございましたら、お気軽にお問い合わせください。
Mac OS X Lion

Ubuntu

于 2012-10-01T17:49:19.083 に答える