qml_puthon_user
qml_puthon_user20. November 2019 02:28

Перекрытие внешнего вида между Rectangle qml

qml

Здравствуйте, я недавно начал изучать QML и появился вопрос по поводу создания своего элемента. Мне требуется вставить один Rectangle в другой, это я иделаю.

Rectangle {
        x: 27
        y: 31
        width: 100
        height: 100
        color: "blue"
        radius: 30

        Rectangle {
            x: 0
            y: 0
            width: 100
            height: 100

            color: "green"

        }
    }

После того, как вставляю второй Rectangle в первый, второй перекрывает скругления первого. Есть какие-либо варианты решения этой проблемы? Спасибо!

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

10
Алексей Внуков
  • 20. November 2019 02:44

правильно, как вы написали так он и делает. дело в том что вы по тем же размерам и в том же месте ставляете новый прямоугольник поэтому происходит перекрытие, вот если сделаете на оборот, скругление углов у второго - то из-под второго будут торчать уголочки первого

    Evgenii Legotckoi
    • 20. November 2019 02:48

    Добрый день

    Если вы хотите, чтобы уголки внутреннего Rectangle срезались закругление внешнего, то используйте свойство clip

    Rectangle {
        x: 27
        y: 31
        width: 100
        height: 100
        color: "blue"
        radius: 30
    
        clip: true // Для срезания всех объектов, которые выходят за пределы этого Rectangle
    
        Rectangle {
            x: 0
            y: 0
            width: 100
            height: 100
    
            color: "green"
    
        }
    }
    
      qml_puthon_user
      • 20. November 2019 03:09
      • (bearbeitet)

      Clip не срабатывает. Я пробую сделать в QtDesignStudio и просто через qml файл и python скрипт с вызовом qml файла(скрипт рабочий)

      import QtQuick 2.12
      import QtQuick.Controls 2.3
      
      ApplicationWindow
      {
          id:general_win
          visible: true
          width: 800
          height: 600
          title: qsTr("title")
      
      
      
              Rectangle 
              {
                  x: 27
                  y: 31
                  width: 100
                  height: 100
                  color: "blue"
                  radius: 30
      
                  clip: true // Для срезания всех объектов, которые выходят за пределы этого Rectangle
      
                  Rectangle 
                  {
                      x: 0
                      y: 0
                      width: 80
                      height: 80
      
                      color: "green"
      
                  }
              }
      
      }
      

        qml_puthon_user
        • 20. November 2019 03:44

        Я увидел, как обрезается в QtDesignStudio. Да, Clip срабатывает, и когда выносится внутренний Rectangle за границу внешнего, внутренний обрезается. Но, получается, что Clip не распространяется на radius? Можно сделать так, чтобы при скруглении границ внешнего Rectangle, так же обрезались и у внутреннего?

        import QtQuick 2.12
        import QtQuick.Controls 2.3
        
        ApplicationWindow
        {
            id:general_win
            visible: true
            width: 800
            height: 600
            title: qsTr("title")
        
            Rectangle 
            {
                x: 27
                y: 31
                width: 100
                height: 100
                color: "blue"
                radius: 30
        
                clip: true // Для срезания всех объектов, которые выходят за пределы этого Rectangle
        
                Column
                {
                    width: parent.width
                    height: parent.height
                    Rectangle 
                    {
                        x: 0
                        y: 0
                        width: parent.width
                        height: parent.height / 2
        
                        color: "green"
        
                    }
        
                    Rectangle 
                    {
                        x: 0
                        y: 0
                        width: parent.width
                        height: parent.height / 2
        
                        color: "pink"
        
                    }
                }
            }
        }
        

        Для более понятного понимания того, что я хочу сделать.
        Я сделал внешний Rectangle и вставил в него ещё 2 Rectangle разными цветами. Теперь мне требуется, чтобы они повторили скругления от внешнего Rectangle.

          Evgenii Legotckoi
          • 20. November 2019 03:54
          • Die Antwort wurde als Lösung markiert.

          Мда, немного почитав другие форумы, я нашёл информацию о том, что clip действтиельно работает подобным образом. Это было сделано из-за соображений производительности. Это написано в багтрекере Qt.

          Но то, что вы хотите, можно сделать с помощью QtGraphicalEffects

          Вот код

          import QtQuick 2.12
          import QtQuick.Window 2.12
          import QtGraphicalEffects 1.13
          
          Window {
              visible: true
              width: 640
              height: 480
              title: qsTr("Hello World")
          
               Rectangle {
                   id: rect
                   x: 27
                   y: 31
                   width: 100
                   height: 100
                   radius: 30
                   color: "blue"
                   clip: true
          
                   layer.enabled: true
                   layer.effect: OpacityMask {
                       maskSource: Item {
                           width: rect.width
                           height: rect.height
                           Rectangle {
                               anchors.centerIn: parent
                               width: rect.adapt ? rect.width : Math.min(rect.width, rect.height)
                               height: rect.adapt ? rect.height : width
                               radius: 30
                           }
                       }
                   }
          
                   Rectangle {
                       x: 0
                       y: 0
                       width: 80
                       height: 80
          
                       color: "green"
                   }
               }
          }
          
          

          Вот результат

            qml_puthon_user
            • 20. November 2019 04:54

            Подскажите, пожалуйста. В своём проекте Вы используете Window, как главное окно. Я пробовал написать ApplicationWindow и закомментировать "import QtQuick.Window 2.12". При запуске ничего не показывает. Никак не смог найти различия между Window и ApplicationWindow. Есть ли какие-то различия в их использовании?

              Evgenii Legotckoi
              • 20. November 2019 04:57

              импорты не все добавили скорее всего. так напишите

              import QtQuick 2.12
              import QtQuick.Controls 2.3
              import QtGraphicalEffects 1.13
              
              ApplicationWindow  {
              
              

              ApplicationWindow это тип наследованный от Window. Отличается тем, что имеет свойства для MenuBar, ToolBar, и StatusBar с платформозависимым поведением.

                qml_puthon_user
                • 20. November 2019 05:04

                Да, действительно, не досмотрел. Четвёртые сутки сижу с освоением qml. :) Спасибо! :)

                  qml_puthon_user
                  • 5. Dezember 2019 12:07

                  Я есть возможность скругления углов у всего окна приложения? Подобно, как в MacOS сделано.

                    Evgenii Legotckoi
                    • 5. Dezember 2019 16:12

                    Это уже кастомная стилизация. Придётся отключать обрамление и самостоятельно реализовывать ресайз окна, его перемещение, стиль и т.д.

                    Вот статья, как отключить обрамление окна - QML - Урок 031. Отключаем системное обрамление окна в QML и пишем код для обработки перемещения и ресайза окна

                      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