8

アプリケーションにQQuickWindowでQQmlApplicationEngineを使用していますが、メインウィンドウを透明にすることはできません。アプリケーションがポップアップする前にスプラッシュを設定したいのですが、ウィンドウコンポーネントを使用して透明にする必要がありますが、そうではありません.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();
}

しかし、setColor は win7 では機能しません。QDeclarativeViewの方法があることは知っていますが、QQuickviewの解決策を見つけたとしても、QQuickWindowではうまくいくはずですが、いいえ、誰か助けてください..

4

3 に答える 3

6

QtQuickWindow型はQQuickWindowC++ クラスにマップされ、QWindow. キャメロンの回答によると、ウィンドウフラグを設定できます。opacityただし、半透明にするには、たとえば 0.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
    }
}
于 2013-08-30T19:38:06.177 に答える
0

フレームレスの透明なウィンドウ効果を実現するには、次のコードを使用することを検討してください。

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; }");

親ウィンドウまたはそれを含むウィンドウにはフレームがなく、背景が半透明であるという考え方です。次に、親 QWidget 内に子 QWidget をネストし、透明性のために QSS を使用してスタイルを適用します。

于 2013-08-30T14:46:58.997 に答える