BlinCT
BlinCT9. Juli 2016 17:00

Создание окна поверх остальных

Android, qml, Rectangle, Диалоговое окно

Всем привет.
Пытаюсь найти инфу о том, как, например, при нажатии на какую-то кнопку поверх программы появляется окно. То есть по центру и все, что под ним находится темнеет немного.
Думал, что это обычный Rectangle, но похоже, что нет.
Если кто может кинуть какой-то грубый набросок примера или ссылку с оф сайта, буду признателен.
Пытаюсь это реализовать в QML.
Заранее благодарю.
Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

1
Evgenii Legotckoi
  • 10. Juli 2016 02:48
  • Die Antwort wurde als Lösung markiert.

Полагаю, что здесь идёт разговор о диалоговом окне. Здесь нужно делать появляющийся фон и само диалоговое окно. Меня не впечатлили дефолтные Диалоги, поэтому я на данный момент пользуюсь следующим вариантом, который покажу на примере простого приложения:
main.qml

import QtQuick 2.7
import QtQuick.Controls 1.5
 
ApplicationWindow {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")
 
    Button {
        text: "Click Me"
        anchors.centerIn: parent
        onClicked: {
            dialog.showDialog()
        }
    }
 
    SimpleDialog {
        id: dialog
        contentText: qsTr("Check Text")
        onBack: hideDialog()
    }
}

Затемняющийся фон, который выкидывает сигнал back(), когда по нему кликают:
DialogBackground.qml

import QtQuick 2.0
 
Rectangle {
    id: root
 
    signal backClicked
 
    color: "#333"
    anchors.fill: parent
    opacity: 0
    state: "hideBack"
    visible: false
 
    states: [
        State {
            name: "hideBack"
            PropertyChanges { target: root; opacity: 0;}
        },
        State {
            name: "showBack"
            PropertyChanges { target: root; opacity: 0.7;}
        }
    ]
 
    transitions: Transition {
        from: "hideBack"; to: "showBack"; reversible: true
        NumberAnimation { properties: "opacity"; duration: 250;}
    }
 
    MouseArea {
        anchors.fill: parent
        onClicked: backClicked()
    }
 
    function show(){
        root.visible = true
        root.state = "showBack"
    }
 
    function hide(){
        root.visible = false
        root.state = "hideBack"
    }
}

И сам диалог, который тоже выкидывает сигнал back(), когда нажимают по тексту Back (данный текст выполняет роль кнопки). Там же сделана реализация пересчёта положения диалога, когда открывается виртуальная клавиатура на мобильных устройствах, типа Android, к примеру.
SimpleDialog.qml

import QtQuick 2.7
import QtQuick.Controls 1.4
 
Item {
    id: root
    signal back
    property alias contentText: dialogText.text
    anchors.fill: parent
    visible: false
 
    DialogBackground {
        id: dialogBackground
        onBackClicked: {
            hideDialog()
        }
    }
 
    Rectangle {
        id: dialog
        width: 240
        height: 220
        radius: 4
        color: "whitesmoke"
        anchors.top: parent.top
        anchors.topMargin: {
            Qt.inputMethod.visible ?
                        (parent.height - Qt.inputMethod.keyboardRectangle.height - dialog.height)/2 :
                        (parent.height - dialog.height)/2;
        }
        anchors.horizontalCenter: parent.horizontalCenter
 
        Text {
            id: dialogText
            wrapMode: Text.Wrap
            color: "black"
            anchors {
                top: parent.top
                left: parent.left
                right: parent.right
                margins: 16
            }
 
            font.pixelSize: 16
 
            verticalAlignment: Text.AlignVCenter
            horizontalAlignment: Text.AlignHCenter
        }
 
        Text {
            id: textBack
            text: qsTr("Back")
            color: "black"
            visible: true
 
            anchors.right: parent.right
            anchors.bottom: parent.bottom
            anchors.margins: 16
 
            font.pixelSize: 24
 
            verticalAlignment: Text.AlignVCenter
            horizontalAlignment: Text.AlignHCenter
 
            MouseArea {
                anchors.centerIn: parent
                width: parent.paintedWidth
                height: parent.paintedHeight
                onClicked: back()
            }
        }
    }
 
    function showDialog() {
        dialogBackground.show()
        root.visible = true
    }
 
    function hideDialog() {
        dialogBackground.hide()
        root.visible = false
    }
}

    Kommentare

    Nur autorisierte Benutzer können Kommentare posten.
    Bitte Anmelden oder Registrieren
    Letzte Kommentare
    A
    ALO1ZE19. Oktober 2024 08:19
    Fb3-Dateileser auf Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
    ИМ
    Игорь Максимов5. Oktober 2024 07:51
    Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
    d
    dblas55. Juli 2024 11:02
    QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
    k
    kmssr8. Februar 2024 18:43
    Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
    Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
    Jetzt im Forum diskutieren
    J
    JacobFib17. Oktober 2024 03:27
    добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
    JW
    Jhon Wick1. Oktober 2024 15:52
    Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
    КГ
    Кирилл Гусарев27. September 2024 09:09
    Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
    F
    Fynjy22. Juli 2024 04:15
    при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

    Folgen Sie uns in sozialen Netzwerken