Всплывающий элемент теряет непрозрачность
У меня странная проблема с 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
.