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. The best way to handle signals inside Grid with Buttons?
QtWS25 Last Chance

The best way to handle signals inside Grid with Buttons?

Scheduled Pinned Locked Moved Unsolved QML and Qt Quick
gridsignalbutton
2 Posts 1 Posters 1.3k 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.
  • F Offline
    F Offline
    Ferdl
    wrote on 16 Jun 2016, 15:20 last edited by Ferdl
    #1

    Hi all,
    I try to write an good solution to handle some button mouse events. I use a Grid and fill it with some button objects.

    //Menu.qml
    //one part of my qml file
    // using QtQuick 1.1 with Qt 4.8.5

    id: menuuser1
        property string buttonUserTEXT_A: qsTR("TEXT A")
        property string buttonUserTEXT_B: qsTR("TEXT B")  ....
    //...
    
    //...
    
         function doStuffWhenButtonInGridPressed() { }
    
         Grid {
             id: columnbutton         
             y: 30
             width: 600
             height: 440
             anchors.horizontalCenter: parent.horizontalCenter
             columns: 2
             spacing: 10
             opacity: 1
    
             property real h: 56
             property real w: ((columnbutton.width-columnbutton.spacing)/2)
    
             ButtonMenu { width: columnbutton.w; height: columnbutton.h; operation: buttonUserTEXT_A; }
             ButtonMenu { width: columnbutton.w; height: columnbutton.h; operation: buttonUserTEXT_B; }         
             ButtonMenu { width: columnbutton.w; height: columnbutton.h; operation: buttonUserTEXT_C; }
             ButtonMenu { width: columnbutton.w; height: columnbutton.h; operation: buttonUserTEXT_D; }
         }
    

    This is the file to define the Button Design
    //ButtonMenu.qml

    Rectangle {
            id: buttonmenu
            property alias operation: buttonTextM.text
            signal clicked(string buttontext)
           
            Text {
                id: buttonTextM
                anchors.centerIn: parent; anchors.verticalCenterOffset: FontVertOffst
                color: color_button_text
                verticalAlignment: Text.AlignVCenter
                font.family: a_Font
                font.pixelSize: 26
            }
            MouseArea {
                id: mouseArea
                anchors.fill: parent
                onClicked: {
                    if (!parent.enabled || !parent.visible)
                        return;
                    if     (buttonTextM.text == menuuser1.buttonUserTEXT_A)     { menuuser1.state = "A" }
                    else if(buttonTextM.text == menuuser1.buttonUserTEXT_B)   { //do some other stuff }
                    else if(buttonTextM.text == menuuser1.buttonUserTEXT_C)  { menuuser1.state = "B" }
                    else if(buttonTextM.text == menuuser1.buttonUserTEXT_D)  { menuuser1.state = "C" }
                    else if(buttonTextM.text == "Back")                      { menuuser1.state = "D" }
                    clicked(buttonTextM.text)
                }
            }
            states:
                State{
                    name: "pressed"; when: mouseArea.pressed
                    PropertyChanges { target: buttonmenu; color: color_button_pressed; }
                    PropertyChanges { target: buttonTextM; color: color_button_text_pressed; }
                }
     }
    
    

    Now i like to have a function in my MENU.qml file to handle/catch all the signals from the different buttons when clicked. I added the signal to the ButtonMenu.qml but at the Menu.qml file i have no access.

    function doStuffWhenButtonInGridPressed() { }
    

    Actually I do all the stuff inside each "buttonmenu" and I think this is not the best way, because every time if one button will be created with the Grid I have all the if-else stuff in each object. I'm right?
    I want just one function at my main MENU.qml file to handle the button events.
    Any idea how to do this in a better way? Would be great....

    Thanks

    1 Reply Last reply
    0
    • F Offline
      F Offline
      Ferdl
      wrote on 16 Jun 2016, 15:48 last edited by
      #2

      I think i got it... sometimes you don't see the tree in the wood...

      Is just change inside the Grid....

      ButtonMenu { width: columnbutton.w; height: columnbutton.h; operation: buttonUserTEXTA; onClicked: {menuuser.state = "STATE A" } }
      

      so easy, and I can remove the if-else stuff inside the ButtonMenu.qml...

      I think its SOLVED!!

      1 Reply Last reply
      0

      1/2

      16 Jun 2016, 15:20

      • Login

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