Всплывающий элемент теряет непрозрачность


У меня странная проблема с Popup QML-компонентом из QtQuick2 , когда я делаю open(), он показывает прозрачный фон , и он должен быть непрозрачным.

Вот как я вызываю компонент Popup из файла main.qml:

NewUser {
    id: new_user_form
}

Это источник компонента:

// File: NewUser.qml
Popup {
    id: new_user_popup
    modal: true
    focus: true
    x: 10
    y: 10
    width: 300
    height: 200


    Rectangle {
        anchors.fill: parent
        color: "transparent"
        border.color: "red"
    }
}

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

Прозрачное Всплывающее Окно

Теперь я могу исправить эту ошибку, переместив источник NewUser.qml в main.qml , и теперь все выглядит нормально:

Это теперь 'исправлено' main.qml:

Popup {
    id: new_user_form
    modal: true
    focus: true
    x: 10
    y: 10
    width: 300
    height: 200
}

Смотрите, всплывающее окно полностью непрозрачно :

Введите описание изображения здесь

Итак, почему, если я перемещаю исходный код компонента в отдельный файл из main.qml, он теряет непрозрачность ? Моя главная.у qml есть много других вещей, но я считаю, что это не связано с всплывающим окном, также идентификатор уникален. Я надеюсь, что это не какая-то проблема с QT 5.8 RC (который я использую для разработки), он еще не является официальным, но скоро он будет быть.

Редактировать:

Я думаю, я нашел ошибку. Ошибка воспроизводима с Qt 5.8 и Qt 5.7

Для воспроизведения создайте проект со следующими файлами:

Основной файл:

//main.qml
import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.0

ApplicationWindow {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    NewUser {
        id: new_user_form
    }
    Button {
        text: "open popup"
        onClicked:  {
            new_user_form.open()
        }
    }
}

Файл компонента (NewUser.qml)

//File: NewUser.qml
import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Controls.Material 2.0
import QtQuick.Dialogs 1.2
import QtQuick.Layouts 1.3
import Qt.labs.settings 1.0
import QtQuick.Templates 2.0

Popup {
    id: new_user_popup
    modal: true
    focus: true
    x: 10; y:10;
    height: 200; width: 300;

    Button {
        text: "Test button"
    }
}


//File: qtquickcontrols2.conf
; This file can be edited to change the style of the application
; See Styling Qt Quick Controls 2 in the documentation for details:
; http://doc.qt.io/qt-5/qtquickcontrols2-styles.html

[Controls]
Style=Material

[Universal]
Theme=Light
;Accent=Steel

[Material]
Theme=Light
;Accent=BlueGrey
;Primary=BlueGray



//File: main.cpp
#include <QGuiApplication>
#include <QQmlApplicationEngine>

int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    engine.load(QUrl(QLatin1String("qrc:/main.qml")));

    return app.exec();
}

Что делает Жук? Если вы нажмете на кнопку "Открыть всплывающее окно", вы увидите затемненный экран, но не всплывающее окно вообще.

1 2

1 ответ:

Это не ошибка. Смотрите, вы не используете пространство имен для импорта шаблонов.

import QtQuick.Templates 2.0 as T

Для ясности существует взаимно однозначное отображение между типами, предоставляемыми импортами QtQuick.Templates и QtQuick.Controls. Для каждого типа, доступного в импорте QtQuick.Controls, в импорте QtQuick.Templates существует невизуальный тип шаблона с тем же именем. Рекомендуется использовать пространство имен для импорта шаблонов, чтобы избежать дублирования с типами, предоставляемыми импортом QtQuick.Controls.