web-dev-qa-db-ja.com

qt5(qml)のフレームレスウィンドウ

私はウェブ検索にいくつかの良い時間を費やしましたが、何も私を助けません。

QMLを使用してGUIを構築し、フレームなしでGUIを作成したいと思います。

Main.cppを次のように変更しようとしました:

#include <QtGui/QGuiApplication>
#include "qtquick2applicationviewer.h"

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);
    QtQuick2ApplicationViewer viewer;

    viewer.setMainQmlFile(QStringLiteral("qml/RR_QML/main.qml"));
    viewer.setFlags(Qt::FramelessWindowHint | Qt::Window);
    viewer.showExpanded();

    return app.exec();
}

Main.qmlファイルも変更しようとしました。

Window
{
    id: rootWindow
    flags: Qt.FramelessWindowHint | Qt.Window

    // my qml code here
}

しかし、何も機能しません。

助けてくれて嬉しいです、ありがとう!

私は〜と働く:

  • 7x64で勝つ
  • Qt 5.1.1
13
AsfK

たとえば、これはUbuntuで機能します。

import QtQuick 2.2
import QtQuick.Window 2.0
import QtQuick.Controls 1.1
import QtQuick.Controls.Styles 1.1

ApplicationWindow {
    id: backlight
    flags: Qt.FramelessWindowHint
    visible: true
    title: qsTr("backlight")
    width: 500
    height: 50
    x: (Screen.width - width) / 2
    y: (Screen.height - height) / 2
    color: "transparent"

    property real slideValue
    signal onSlide(real value)

    Rectangle {
        anchors.centerIn: parent
        width: parent.width
        height: 50
        color: "transparent"

        Rectangle {
            anchors.fill: parent
            radius: 25
            opacity: 0.3
            color: "gray"
        }

        Slider {
            anchors.centerIn: parent
            width: backlight.width - 16
            height: backlight.height
            value: backlight.slideValue
            focus: true
            onValueChanged: backlight.onSlide(value)
            Keys.onSpacePressed: Qt.quit()
            Keys.onEscapePressed: Qt.quit()

            style: SliderStyle {
                groove: Rectangle {
                    implicitHeight: 8
                    radius: 4
                    color: "gray"
                }
                handle: Rectangle {
                    anchors.centerIn: parent
                    color: control.pressed ? "white" : "lightgray"
                    border.color: "gray"
                    border.width: 2
                    width: 34
                    height: 34
                    radius: 17
                }
            }
        }
    }
}

これはこのプロジェクトの抜粋です: https://github.com/oblitum/backlight/tree/cpp

最初は Qt.SplashScreen | Qt.FramelessWindowHint を使用していましたが、Ubuntuでは違いがありませんでした(他の人もQt.SubWindow | Qt.Tool | Qt.FramelessWindowHint | Qt.WindowSystemMenuHintを使用しています)ので、Qt.FramelessWindowHintだけを残しました。それはあなたに違いをもたらすかもしれません。

これはQt5.2です。

編集

気にしないでください。Qt.SplashScreenは違いを生みました。アプリケーションアイコンは作成されません。

19
pepper_chico