Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. To create a new dialogue box using QML

To create a new dialogue box using QML

Scheduled Pinned Locked Moved QML and Qt Quick
4 Posts 3 Posters 14.4k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A Offline
    A Offline
    actionking
    wrote on last edited by
    #1

    Dear guys,
    I'm a beginner in QT.Just before 5 days i have started to work on it.Now i was working in QML...In that,my task is to create a new dialogue box by disabling the parent control..That is,if we click any button or any item,a new small dialgoue box should be overlayed on the big rectangle,control should be in new dialogue box and at that time if we clicked in big rectangle region means,it should not be obeyed (i.e;control should be in new dialogue box untill we cancel it ).But both big rectangle and new small dialogue box should be visible(i.e;new dialogue should be overlayed on the big rectangle and the big rectangle should be visible as a partial.Is there any property ,if means please explain it with a example.
    with regards,
    mohanakannan

    1 Reply Last reply
    0
    • J Offline
      J Offline
      JapieKrekel
      wrote on last edited by
      #2

      I'm also not working that long on QML but this is how I do it.

      I make the dialog as a new .qml file. This will be created dynamically and added on top of the parent.
      You could also use the QML Loader component to load a QML file if you want.

      The dialog component qml file contains a overlay that will cover the 'parent control' as you call it. That overlay has a MouseArea with no handler to disable clicking outside of the dialog.

      I prepared a simple demo consisting of the main screen that will popup the dialog and the dialog qml file itself.
      MainWindow.qml
      @
      // This is the main window that will show a dialog as a popup
      // It simple contains a rectangle that acts as a button
      // The dialog will be created dynamically (i.s.o. using a Loader)
      // The dialog is destroyed in the Dialog.qml itself
      import QtQuick 2.0

      // We start with a Rectangle so that we can set color etc
      Rectangle {
      id: mainWindow
      width: 360
      height: 360

      // This rectangle acts as the button
      // It has no states, so no pressed states, etc
      // Added rounded corners (radius) for button appearance
      Rectangle {
          id: myButton
          x: 125
          y: 84
          width: 100
          height: 30
          color: "#000000"
          Text {
              anchors.centerIn: parent
              color: "#FFFFFF"
              text: "dialog"
          }
          // This mouse area fills the complete myButton
          // when clicked it will create Dialog.qml dynamically
          // adding it to the rectangle with the id=mainWindow
          MouseArea {
              anchors.fill: parent
              onClicked: {
                  // now we create a dialog QML object dynamically
                  // we do not pass any properties to the dialog so we use {}
                  Qt.createComponent("Dialog.qml").createObject(mainWindow, {});
              }
          }
      }
      

      }
      @

      Now we need a QML file for the dialog itself. Create a file called Dialog.qml
      @
      // This QML file (called Dialog.qml) is used to create a simple popup
      // It will show an overlay on top of the parent and a small white area
      // that is the dialog itself. For demo purposes no fancy stuff in the popup
      import QtQuick 2.0

      // Use an item as container to group both the overlay and the dialog
      // I do this because the overlay itself has an opacity set, and otherwise
      // also the dialog would have been semi-transparent.
      // I use an Item instead of an Rectangle. Always use an 'Item' if it does not
      // display stuff itself, this is better performance wise.
      Item {
      id: dialogComponent
      anchors.fill: parent

      // Add a simple animation to fade in the popup
      // let the opacity go from 0 to 1 in 400ms
      PropertyAnimation { target: dialogComponent; property: "opacity"; 
                                    duration: 400; from: 0; to: 1; 
                                    easing.type: Easing.InOutQuad ; running: true }
      
      // This rectange is the a overlay to partially show the parent through it
      // and clicking outside of the 'dialog' popup will do 'nothing'
      Rectangle {
          anchors.fill: parent
          id: overlay
          color: "#000000"
          opacity: 0.6
          // add a mouse area so that clicks outside
          // the dialog window will not do anything
          MouseArea {
              anchors.fill: parent
          }
      }
      
      // This rectangle is the actual popup
      Rectangle {
          id: dialogWindow
          width: 100
          height: 62
          radius: 10
          anchors.centerIn: parent
          
          Text {
              anchors.centerIn: parent
              text: "This is the popup"
          }
          
          // For demo I do not put any buttons, or other fancy stuff on the popup
          // clicking the whole dialogWindow will dismiss it
          MouseArea{
              anchors.fill: parent
              onClicked: {
                  // destroy object is needed when you dynamically create it
                  dialogComponent.destroy()
              }
          }
      }
      

      }
      @

      I hope this is what you're looking for.

      Happy coding

      1 Reply Last reply
      1
      • A Offline
        A Offline
        actionking
        wrote on last edited by
        #3

        Hi JapieKrekel,
        Thanks for your reply,sir....It's worked.....I have gone through your codings for three times and then i got it out,what you are coming to say...Now i need to integrate this in my coding...Thanks a lot.Now i'm feeling better..
        With regards,
        K.V.Mohanakannan

        1 Reply Last reply
        0
        • nathanN Offline
          nathanN Offline
          nathan
          wrote on last edited by
          #4

          Hi JapieKrekel,
          Thanks for your post it helped me a lot.
          I am facing a problem though. The screen where the popup shows up is scrollable. When the popup is visible (the object is created) the user can still scroll behind the popup.
          Do you know how to avoid this?
          Best,

          1 Reply Last reply
          0

          • Login

          • Login or register to search.
          • First post
            Last post
          0
          • Categories
          • Recent
          • Tags
          • Popular
          • Users
          • Groups
          • Search
          • Get Qt Extensions
          • Unsolved