Qt5 & QtQuick2 - прозрачное главное окно

Я пытаюсь создать простой пользовательский интерфейс Qt с окном без рамки и закругленными углами. Начиная с нового проекта с шаблоном QtQuick 2 Application, мой код выглядит так:

main.cpp

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

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

    QtQuick2ApplicationViewer viewer;

    viewer.setMainQmlFile(QStringLiteral("qml/qtquick-test/main.qml"));
    viewer.setFlags(Qt::FramelessWindowHint);
    viewer.showExpanded();

    return app.exec();
}

main.qml

import QtQuick 2.0

Rectangle {
    width: 360
    height: 360
    radius: 10
    color: "red"

    Text {
        text: qsTr("Hello World")
        anchors.centerIn: parent
    }
    MouseArea {
        anchors.fill: parent
        onClicked: {
            Qt.quit();
        }
    }
}

И вот результат:

И вот результат

Чего я не хочу делать, так это избавляться от белых углов, делая главное окно прозрачным. Однако, насколько я могу судить, в Qt5 нет возможности сделать это, потому что у нас нет таблиц стилей и т.д., и я не использую QtWidget. Должен ли я использовать QtWidget?

Кстати, я новичок в Qt и Qt5.


person andrewrjones    schedule 08.02.2013    source источник
comment
Похоже, это может быть решено в 5.1 путем создания виджета в виде окна контейнера с помощью QWidget::createWindowContainer(). См. отчет об ошибке и commit. Я собираюсь попробовать скомпилировать 5.1 из исходников и посмотреть, смогу ли я заставить его работать.   -  person andrewrjones    schedule 09.02.2013
comment
@andrewrjones Вы можете ответить и принять свой вопрос.   -  person Motti Strom    schedule 14.07.2014
comment
@MottiStrom Так и не нашел ответа, и вместо этого решил использовать что-то другое.   -  person andrewrjones    schedule 17.07.2014


Ответы (4)


У меня это работает под Windows 8 и Ubuntu 12.04.

import QtQuick 2.3
import QtQuick.Window 2.2

Window {
    width: 300
    height: 300
    flags: Qt.FramelessWindowHint | Qt.Window
    color: "transparent"

    Rectangle {
        color: "brown"
        anchors.fill: parent
        anchors.margins: 10
    }
}
person Marcus Ottosson    schedule 24.11.2014
comment
Спасибо, Маркус! Это почти все. На Mac мне просто нужно было добавить visible: true в окно и radius: 10 в прямоугольник, и я получил именно то, что хотел. Загрузил это в качестве примера проекта на GitHub: github.com/andrewrjones/qt-transparent-main -окно - person andrewrjones; 24.11.2014
comment
Отлично, рад, что получилось. :) И спасибо, что упомянули меня в своем репо. - person Marcus Ottosson; 25.11.2014

Для тех, кто наткнется на это поздно, как и я. Для C ++ и Python, по крайней мере, вы должны указать атрибут виджета WA_TranslucentBackground, чтобы иметь возможность сделать ваш фон прозрачным.

person Akandesh    schedule 01.09.2020

Вы должны использовать
viewer.setMask()
, чтобы указать виджету qt, который отображает qml, где рисовать, а где нет ....

Я использовал в основном прямоугольные маски, но setMask принимает QRegion, который, как мне кажется, поддерживает более сложные формы и даже растровые маски.

person N0name    schedule 31.03.2014

Установите для прозрачного фона цвет фона так, чтобы альфа-канал был равен 0 в средстве просмотра приложения:

viewer.setColor(QColor(0, 0, 0, 0));
person grizzancs    schedule 12.06.2013
comment
Это не работает с Qt 5.0. У вас будет черный фон, а не прозрачный. - person nixeagle; 23.08.2013