[SailfishDevel] Dynamically populate a ContextMenu

christopher.lamb at thurweb.ch christopher.lamb at thurweb.ch
Sat Nov 23 15:01:58 UTC 2013


Hi Antoine

One useful technique for finding out what the Silica components are  
doing (and how you may need to modify your code, or to prove a bug),  
is to create a private clone of the "problem" component in your project.

In your case it is ContextMenu, which on my development host lives in

/Users/christopherlamb/SailfishOSAlpha5/mersdk/targets/SailfishOS-i486-x86/usr/lib/qt5/qml/Sailfish/Silica/ContextMenu.qml

Copy that file into your project as AntContextMenu.qml, and in your  
code use AntContextMenu rather than ContextMenu.

You will also need to clone the private folder + contents to your  
project (without renaming).

Once you have done that, you can then add console.log statements in  
AntContextMenu.qml in appropriate places, make "what if .." changes,  
and generally play around in the guts of the Silica code. You can  
easily swap back and forth between your debug / hack version and the  
standard.

Of course this should only temporary while your are figuring out what  
is wrong. Once you have a solution you should revert to the standard  
component.

Chris


Zitat von Tigre-Bleu <devel at tigre-bleu.net>:

> Hi,
>
> I try to dynamically populate a ContextMenu but either I ran into a  
> bug in the Silica Component or there is something I'm doing wrong.
>
> Here is an example of simplified code showing the problem:
>
>         ComboBox {
>             width: parent.width
>             label: "Menu"
>
>             menu: ContextMenu {
>                 id: menu
>                 MenuItem { text: "Static 1" }
>                 MenuItem { text: "Static 2" }
>             }
>
>             Component {
>                 id: menuItemComp
>                 MenuItem {}
>             }
>
>             Component.onCompleted: {
>                 console.debug("Populating menu")
>                 for (var i=0; i< 4 ; i++){
>                     var newMenuItem =  
> menuItemComp.createObject(menu, {"text" : "Dynamic" + i})
>                 }
>             }
>         }
>
> And in attachment is the result in the emulator.
>
> We see that Static entries are correctly displayed, but dynamic ones  
> are all superposed.
>
> What is wrong?
>
> Thanks,
>
> Antoine





More information about the Devel mailing list