[Kde-java] KListView and KListViewItem

Richard Dale Richard_Dale at tipitina.demon.co.uk
Sat Mar 13 10:06:05 CET 2004


On Friday 12 March 2004 20:21, Paul Sprakes wrote:
> I have subclassed KListViewItem with a class that takes a delegate object
> which I can inspect when I catch the various signals from KListView. I have
> found though that while items added as children to KListView will come
> through the signal mechanism as the correct subclass, items added as
> children of a ListViewItem always come back as QListViewItem. I cannot cast
> the QListViewItem items back into my subclass and there is no way for me to
> get any info about what has been selected other then the displayed text.
>
> Can anyone shed any light on this or tell me what I am doing wrong?
>
> //this is connected to the "executed(QListViewItem)" signal
> public void treeItemSelected(QListViewItem item) {
> 	System.out.println(item);
> }
>
> private void populateServerTree() {
>   Iterator servers = app.getServers().iterator();
>   while(servers.hasNext()) {
>     NewsServer server = (NewsServer)servers.next();
>     ListViewItem serverNode = new ListViewItem(tree,
> server,server.getHost()); Iterator groups =
> server.getSubscribedGroups().iterator();
>     while(groups.hasNext()) {
>       NewsGroup group = (NewsGroup)groups.next();
>       ListViewItem groupNode = new ListViewItem(serverNode, group,
> group.getName());
>     }
>   }
> }
I think what might have happened here is that the ListViewItems that appear as 
QListViewItems have been garbage collected. However, the C++ underlying 
instance wouldn't have been deleted as it was still in the QListView tree 
with an 'owner' C++ instance. Then, when the signal was emitted the qtjava 
runtime looks for a java instance corresponding to the C++ one, but it 
doesn't find one, and instantiates a new QListViewItem instance.

A work round might be to create an ArrayList and add each ListViewItem to 
that, and then there would always be a live references and java wouldn't 
garbage collect them. I would be interested if that fixes it.

-- Richard


More information about the Kde-java mailing list