Всплывающий элемент теряет непрозрачность
У меня странная проблема с 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 ответ:
Это не ошибка. Смотрите, вы не используете пространство имен для импорта шаблонов.
import QtQuick.Templates 2.0 as TДля ясности существует взаимно однозначное отображение между типами, предоставляемыми импортами
QtQuick.TemplatesиQtQuick.Controls. Для каждого типа, доступного в импортеQtQuick.Controls, в импортеQtQuick.Templatesсуществует невизуальный тип шаблона с тем же именем. Рекомендуется использовать пространство имен для импорта шаблонов, чтобы избежать дублирования с типами, предоставляемыми импортомQtQuick.Controls.

