gpt4 book ai didi

c++ - 如何使用 Qt 4.8 在 Windows 中单击按钮时获得主窗口和小部件的不透明度?

转载 作者:行者123 更新时间:2023-11-30 02:59:48 25 4
gpt4 key购买 nike

我对 Qt 框架有点陌生,所以我在其中一个要求中苦苦挣扎。

我们必须在单击按钮时淡出主窗口,这又会弹出确认消息。这样,只有弹出消息应该可见,背景应该变得不透明。

当前在单击按钮时显示的消息背景变得不透明。但是窗口中的其他小部件仍然很突出。

下面是Ok按钮点击事件的代码片段

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

一种方法是,如果我们单独为所有小部件设置不透明度。但这不是一个好的设计非常感谢任何指导。

最佳答案

可以创建包含小部件并添加具有 background-color 属性和 alpha 属性的 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();

此代码直接取 self 的 Qt Tray Notification Manager 项目。您可以在此处查看完整代码以获取一些上下文:https://github.com/pcmantinker/Tray-Notification-System

请注意,如果您熟悉 CSS,QSS 非常相似。如果您想以某种方式设置所有 QWidget 的样式,您可以使用 QWidget 选择器。但是,如果您只想设置特定 QWidget 的样式,请使用 .QWidget 选择器。为所有 QWidget 设置样式将使每个可见的 QWidget 继承相同的属性,因为每个 UI 元素都派生自 QWidget。在构建样式时请记住这一点。这是对 QSS 的引用:http://qt-project.org/doc/qt-4.8/stylesheet.html

以下是它的外观示例图片:
Windows 7
Windows 7
Mac OS X 雄狮
Mac OS X Lion
Ubuntu
Ubuntu
我希望这有帮助。如果您有任何问题,请告诉我。

关于c++ - 如何使用 Qt 4.8 在 Windows 中单击按钮时获得主窗口和小部件的不透明度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12600175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com