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?
Forum Updated to NodeBB v4.3 + New Features

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