即时通讯使用QQml.AppindEngine和QQuickWindow进行应用程序,我无法透明主窗口.我想在应用程序弹出之前设置一个启动画面,我使用Window组件,它应该是透明的,但它不是,我的main.cpp是
int main(int argc, char *argv[])
{
Application app(argc, argv);
QShookaClient shooka_client;
QQmlApplicationEngine engine;
engine.rootContext()->setContextProperty("shooka", &shooka_client);
engine.load(QUrl("qrc:///shooka/shooka.qml"));
QObject *topLevel = engine.rootObjects().value(0);
QQuickWindow *window = qobject_cast<QQuickWindow *>(topLevel);
window->show();
window->setFlags(Qt::FramelessWindowHint);
window->setColor(Qt::transparent);
return app.exec();
}
Run Code Online (Sandbox Code Playgroud)
但是setColor在win7中不起作用.我知道有QDeclarativeView的方法,甚至我找到了QQuickview的解决方案,它有点适用于QQuickWindow但是没有,任何人都可以帮助我...
人们必须意识到WindowQtQuick类型映射到QQuickWindowC++类,并且派生自QWindow.根据Cameron的答案,可以设置窗口标志.但是你还需要设置为opacity0.75,使其半透明.所有这些都可以在QML中完成,不需要从C++设置标志.

import QtQuick 2.1
import QtQuick.Controls 1.0
import QtQuick.Window 2.0
ApplicationWindow {
title: qsTr("Hello World")
width: 640
height: 480
flags: Qt.SubWindow | Qt.Tool | Qt.FramelessWindowHint | Qt.WindowSystemMenuHint | Qt.WindowStaysOnTopHint
opacity: 0.75
visible: true
menuBar: MenuBar {
Menu {
title: qsTr("File")
MenuItem {
text: qsTr("Exit")
onTriggered: Qt.quit();
}
}
}
Button {
text: "Hello World"
anchors.centerIn: parent
}
}
Run Code Online (Sandbox Code Playgroud)
我知道这是一个老问题,但由于它没有标记为已解决,这是我的方法:
import QtQuick 2.4
import QtQuick.Controls 1.3
ApplicationWindow {
title: qsTr("Hello World")
width: 640
height: 480
flags: Qt.FramelessWindowHint
color: "transparent"
visible: true
Rectangle
{
color:"red"
width: parent.width/2
height: parent.height/2;anchors.centerIn: parent
}
}
Run Code Online (Sandbox Code Playgroud)
因此,您将获得一个透明背景,中间有一个红色矩形.您可以轻松更改图像的矩形.
希望帮助了某人.
您可以考虑使用以下代码来实现无框透明窗口效果:
setWindowFlags(
#ifdef Q_OS_MAC
Qt::SubWindow |
#else
Qt::Tool |
#endif
Qt::FramelessWindowHint |
Qt::WindowSystemMenuHint |
Qt::WindowStaysOnTopHint
);
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->setStyleSheet(".QWidget { background-color: rgba(0, 0, 0, 75%); border-width: 1px; border-style: solid; border-radius: 10px; border-color: #555555; } .QWidget:hover { background-color: rgba(68, 68, 68, 75%); border-width: 2px; border-style: solid; border-radius: 10px; border-color: #ffffff; }");
Run Code Online (Sandbox Code Playgroud)
这个想法是您的父窗口或包含窗口没有框架并且具有半透明背景。然后,您将子 QWidget 嵌套在父 QWidget 中,并使用 QSS 应用样式以实现透明度。
| 归档时间: |
|
| 查看次数: |
4166 次 |
| 最近记录: |